diglin_ricento - Version 1.1.0

Version Notes

## Version 1.1.0
- NEW: add buttons to export configuration into a tar.gz archive and/or send it to support shop owner in case of issue with all necessary information: php, magento, installed modules version, ricardo and latest order tables from the database, log files. No customer information are saved.
- NEW: support currency conversion based on the defined Magento currencies rate. It sets prices in CHF to ricardo.ch, products with price catalog in EUR/USD/... and does the opposite while importing a ricardo order in Magento (CHF to EUR/USD/...). Magento Currency Rates must be configured to work.
- NEW: while selecting a ricardo category, you can now provide the product name to get a suggestion of the category/ies you may use
- NEW: display a popup window with a summary of the fees for the current product list before to proceed "Check and List". Data of the form are saved when relevant before to display these fees
- NEW: allow to merge short and description if ricardo description is missing at product level and if the extension is configured for that - Default "disabled"
- NEW: support Magento Watermark Pictures
- NEW: add ricardo banner in the dashboard of the extension
- ENHANCEMENT: make description with carriage return to
HTML Tag configurable - default is 0
- ENHANCEMENT: refactor order import process to reduce potential issues
- ENHANCEMENT: add a new dispatcher to close articles properly for those which are not anymore available on ricardo.ch
- ENHANCEMENT: global performance improvement with the ricardo API and product pictures (> X MB - image attribute and media gallery)
- ENHANCEMENT: configurable products and their options having price are computed differently, it fixes some issues with price calculation but also allow Fees calculation
- ENHANCEMENT: links of the backend user interface depending on the user language are correctly defined (french or german)
- ENHANCEMENT: related products of configurable products are displayed in the products grid of a list after a product is added or after the products listing is saved instead to wait that the product listing is checked
- ENHANCEMENT: cleanup, factorize and perform code related to configurable products
- ENHANCEMENT: set auto increment value of auction sales type to 1 per default
- ENHANCEMENT: the inventory column in the products grid of the products listing has several meaning: 1) if the product is already listed, the value displayed is the quantity of product sent and still available on ricardo, 2) if the product is not yet listed, the quantity displayed is calculated based on the configuration at the product list or the product level, it will be automatically refreshed if the stock of the product changed before it is listed.
- FIX: issue with price calculation when price scope is per website instead global
- FIX: issue with grouped product quantity - default is 1 if related products don't have quantity defined
- FIX: issue with order synchronization on Magento 1.7 and the ricardo payment method
- FIX: issue with Internet Explorer when configuring a product and using defaults values are not expected
- FIX: some translations issue
- FIX: issue with shipping description while editing the configuration at product level into a products listing
- FIX: memory issue due to pictures too big and API requirements (bytes array)
- FIX: issue with MagentoConnect install

## Version 1.0.18
- Add improvements brought by the ricardo library

## Version 1.0.17
- Fix an issue with the transfer of the data via API

## Version 1.0.16
- 077aced Fix issue with wrong memory test at picture level
- 4fb9f9f Change comment
- 0acd985 Improve memory consumption due to images and expected bytes array on ricardo API side
- 411b1b8 Change url for the ricardo assistant on production
- 05d9364 Update README for license information
- 947efb5 Factorize some process in order creation
- 970f5ee Update translation string
- ccc9802 Update translation string "Until sold"
- 73aadc0 [ENHANCE] Seems that external extension instantiate the shipping class, as it is outside of the order scope, an object is missing and provide an error. We fixed it even if we don't support externa
- b161609 [ENHANCE] Prevent memory consumption due to the size of pictures and the fact that we need to unpack the pictures bytes to create bytes array for the ricardo.ch API
- 41e95ee Update Copyright to ricardo.ch AG (keep same license)
- 128b28d Update config.xml version
- 29b5e61 Update language string key in CSV files

## Version 1.0.15
- 8cc97f0 [ENHANCE] Delete old jobs in the SQL way (no collection), speed up the delete and may prevent mysql error
- 571d315 Open new window for a link located into the product list and jumping into ricardo.ch website
- d6be0f1 [BUGFIX] Change the translation string from Ricardo to ricardo.ch
- 195c744 Cosmetic code improvements
- ddd1ff0 Fix an issue with deleting product item from a listing
- 7a71702 Revert deleted xml file to generate magento connect package
- 7fc6abb Update order dispatcher to get error messages
- 6804aba Update Hint.php

## Version 1.0.14
- Fix an issue revealed after fixes done in version 1.0.13 related to getting sales options and rules from products listing item during getting new orders

## Version 1.0.13
- Important fix for price products (and sales options & rules in general) when several listing processes running at same time

## Version 1.0.12
- 7485ad0 Prevent Exception while editing product if API problem appear while conditions options
- 2927622 Add translation for frontend, change payment info template
- 29069ea Fix wrong variable name for payment method instruction
- 1738457 add payment block info in frontend area too for email generated from backend
- 259f885 Fix issue with products grid and massaction
- 8d37514 Update readme file
- ea18812 Redirect to edit page if error occur
- 0fe5a3c Implement Bank information display if ricardo.ch payment method Bank transfer is used, Remove the cleanup listing log as it is duplicate with the job cleanup
- 9cd82a8 Change order of the tab display 1) Synchronization 2) Listing Log instead of the opposite
- bc809c0 Fix random security error message on fresh install

## Version 1.0.10
- e2304ab Change the status of an item to stop if the item has not been sold. It will stop the complete list if all items are stopped.
- e2c0676 Set website Id while saving new customer even if store id was also provided to be sure that the user is saved into the correct website
- 0d01b4a Fix missing log url in message
- ff1005c Skip required option when creating an order, also for custom option
- 9b48ef6 Fix missing home number

## Version 1.0.9
- Fix issue with some optional API property set to 0 (like template Id)
- 0c1eb42 Revert temporary success / error in dispatcher list , improve translations of string in product grid
- 74c3284 Show a small message in sync grid while running or chunk running to allow to differentiate both kind of sync
- 68eed7f Raise to 400 items to trigger in dispatch
- 1d3a839 Prevent create a new job while having a chunk running sync list
- 3241ef0 Change the way to handle the bucket of items in the dispatcher, fix a bug while triggering the order dispatcher and getting the list of listed items
- adcbc59 Improve message display in sync grid
- 6b6c45e Fix issue with "Until Sold" feature
- 2f48ea4 Improve the way to set/get successful or error log item
- 86fcc17 Display Product list name in the sync log grid instead to put it as message
- 1219b09 Fix issue with products grid and configurable products having article inserted also as simple article
- 95efdca Fix duplicate collection item error
- 4d38ed3 Make the option Schedule Reactivation "Until Sold" better explicit and working
- 03bc9cd Update code documentation
- 658c9f6 In some cases, picture's extension is not recognized so change the logic to determine if it exists or not Catch Exception and log them in cron class

## Version 1.0.8
- b5f1afa Update translations file
- c0d3fbb Fix issue with dispatcher and completed status
- 27c48c9 Fix interface issue (invisible language was also required input) with language selection and payment method "other" which needs a payment description and shipping description field if shipping "other" is selected
- 9e0be11 Improve debugging content when dispatcher mets errors
- b994fa0 Improve grid translations for products
- 84baa1b Change order of token DEV/PROD configuration fields
- 868e576 Fix issue with product price max limit (should be only for "Buy now" and payment method with credit card)
- 379a51b Fix issue with too long strings saved into DB if error occurred
- 0eb9f8d Cosmetic code changes
- 79ce926 Change translation
- 356c909 Fix issue with job message and json encoding (some loop appeared in some use cases)
- 738f316 Better judge if some values must be retrieved from the API depending if the extension is configured or not
- cd34d94 Prevent loop when doing the dispatch
- 14d3beb fix uninstall file txt with wrong language folder package
- a5e6350 Fix translation issue in the sync grid
- 90a2f7c Fix issue if extension is disabled with payment and shipping methods
- 33055cc Add nl2br for description

## Version 1.0.7
- 42f18da Prevent warning messages for some variables, Prevent Exception when picture doesn't exist in preview, set per default the dev mode to 1 because user receives BETA API Token first and some people doesn't set correctly the configuration
- 29767d9 Add more condition to display error in case of wrong API configuration and coming from banner notification
- 57da567 Invite user to check his configuration if a problem occurs
- c514cb0 Merge branch 'develop'

## Version 1.0.6
- 6a6ca4f Do not set the status of the parent configurable product when list on ricardo.ch
- eb0d25a Handle correctly errors if done in the backend notification banner
- 68f812a add short description as fallback product description
- bb0c931 change redirect url and add error message
- c4fbe49 Check and List action: save also product listing information
- 349218a Merge branch 'develop' of git://github.com/diglin/ricento into develop
- f467eb4 Fix issue with grid of products after filter reset (missing form key hidden field)
- 4cc8e3b Revert changes done for RIC-102, display products item w/o any error
- afb9215 Add new url to register to the API
- c0b50e9 In case errors are coming from the API but it is at backend notification level, we catch the error and display it as session error message
- 7d0c803 Merge branch 'develop' of github.com:diglin/ricento into develop
- 068a409 allow to delete a job even if it is running, fix some typo translations, allow to save when clicking on "check and list" button from a product listing

## Version 1.0.5
- c1b3c90 Merge branch 'develop'
- 9f59a2f Fix definitely issue RIC-102 with product grid display
- 3c3547a Fix issue RIC-102: product grid display in product listing with some configuration provide error cause of the collection and duplicate items found
- 5d1706e Merge pull request #1 from diglin/develop

## Version 1.0.4
- ebaec62 Remove the filter collection to not get "not visible" products. Don't remember the reason of this filter, hope it doesn't have consequence with order creation (normally no)
- 90e2a93 Merge branch 'develop'

## Version 1.0.3
- c55a6dd Fix issue with wrong store id, should not be website id while getting storeConfig
- 00c2960 Update README.md

## Version 1.0.2
- 880dbfd Fix issue if API not yet configured and Product Edit Page is requested from the backend
- 5841d06 Update gitsubmodule (replace bitbucket with github)
- be2b77a Update readme file
- 9384e3c Update doc

Download this release

Release Info

Developer diglin
Extension diglin_ricento
Version 1.1.0
Comparing to
See all releases


Code changes from version 1.0.18 to 1.1.0

Files changed (251) hide show
  1. app/code/community/Diglin/Ricento/.DS_Store +0 -0
  2. app/code/community/Diglin/Ricento/Block/.DS_Store +0 -0
  3. app/code/community/Diglin/Ricento/Block/Adminhtml/.DS_Store +0 -0
  4. app/code/community/Diglin/Ricento/Block/Adminhtml/Config/Source/Heading.php +1 -1
  5. app/code/community/Diglin/Ricento/Block/Adminhtml/Config/Source/Hint.php +23 -3
  6. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Account.php +2 -2
  7. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Banner.php +110 -0
  8. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Bestsellers.php +5 -5
  9. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Lifetime.php +4 -5
  10. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Renderer/Price.php +35 -0
  11. app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Turnover.php +2 -2
  12. app/code/community/Diglin/Ricento/Block/Adminhtml/Form/.DS_Store +0 -0
  13. app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/.DS_Store +0 -0
  14. app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Checkboxes/Extensible.php +1 -1
  15. app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Fieldset/Inline.php +1 -1
  16. app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Radios/Extensible.php +7 -2
  17. app/code/community/Diglin/Ricento/Block/Adminhtml/Log.php +2 -2
  18. app/code/community/Diglin/Ricento/Block/Adminhtml/{Products/Listing/Log → Log/Listing}/Grid.php +3 -3
  19. app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid.php +8 -7
  20. app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid/Renderer/Progress.php +2 -2
  21. app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid/Renderer/Title.php +2 -2
  22. app/code/community/Diglin/Ricento/Block/Adminhtml/Log/Tabs.php +3 -3
  23. app/code/community/Diglin/Ricento/Block/Adminhtml/Notifications/Default.php +1 -1
  24. app/code/community/Diglin/Ricento/Block/Adminhtml/Notifications/Expiration.php +48 -4
  25. app/code/community/Diglin/Ricento/Block/Adminhtml/Page/Menu.php +1 -1
  26. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Children.php +4 -2
  27. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Form/Renderer/Categories.php +1 -1
  28. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Form/Renderer/Mapping.php +3 -2
  29. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Mapping.php +19 -43
  30. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Mapping/Tree.php +70 -0
  31. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree.php +1 -1
  32. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree/Categories.php +1 -1
  33. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree/Form.php +1 -1
  34. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing.php +1 -1
  35. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Confirmation.php +136 -0
  36. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit.php +12 -2
  37. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Form.php +1 -1
  38. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Article.php +4 -4
  39. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Configured.php +3 -3
  40. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Customoptions.php +3 -3
  41. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Renderer/Inventory.php +67 -0
  42. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Name.php +4 -4
  43. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Renderer/Price.php +16 -0
  44. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Status.php +16 -5
  45. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs.php +1 -1
  46. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/General.php +3 -3
  47. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products.php +9 -8
  48. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Add.php +6 -2
  49. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Massaction.php +1 -1
  50. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Renderer/Inventory.php +0 -47
  51. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Rules.php +1 -1
  52. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Selloptions.php +56 -16
  53. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Form/Abstract.php +1 -1
  54. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid.php +3 -3
  55. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid/Renderer/Status.php +7 -9
  56. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid/Renderer/Total.php +2 -2
  57. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit.php +1 -1
  58. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Form.php +1 -1
  59. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs.php +1 -1
  60. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs/Rules.php +1 -1
  61. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs/Selloptions.php +1 -1
  62. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Preview.php +2 -2
  63. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Log.php +1 -1
  64. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/New.php +1 -1
  65. app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/New/Form.php +1 -1
  66. app/code/community/Diglin/Ricento/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php +2 -2
  67. app/code/community/Diglin/Ricento/Block/Payment/Info.php +1 -1
  68. app/code/community/Diglin/Ricento/Controller/.DS_Store +0 -0
  69. app/code/community/Diglin/Ricento/Controller/Adminhtml/Action.php +122 -3
  70. app/code/community/Diglin/Ricento/Controller/Adminhtml/Products/Listing.php +4 -5
  71. app/code/community/Diglin/Ricento/Exception.php +1 -1
  72. app/code/community/Diglin/Ricento/Helper/Api.php +86 -12
  73. app/code/community/Diglin/Ricento/Helper/Dashboard/Turnover.php +1 -1
  74. app/code/community/Diglin/Ricento/Helper/Data.php +146 -9
  75. app/code/community/Diglin/Ricento/Helper/Image.php +65 -0
  76. app/code/community/Diglin/Ricento/Helper/Price.php +110 -13
  77. app/code/community/Diglin/Ricento/Helper/Support.php +340 -0
  78. app/code/community/Diglin/Ricento/Helper/Tools.php +16 -1
  79. app/code/community/Diglin/Ricento/Model/.DS_Store +0 -0
  80. app/code/community/Diglin/Ricento/Model/Api/Services/Abstract.php +14 -20
  81. app/code/community/Diglin/Ricento/Model/Api/Services/Customer.php +1 -1
  82. app/code/community/Diglin/Ricento/Model/Api/Services/Search.php +39 -0
  83. app/code/community/Diglin/Ricento/Model/Api/Services/Security.php +1 -1
  84. app/code/community/Diglin/Ricento/Model/Api/Services/Sell.php +154 -34
  85. app/code/community/Diglin/Ricento/Model/Api/Services/Selleraccount.php +1 -1
  86. app/code/community/Diglin/Ricento/Model/Api/Services/System.php +1 -1
  87. app/code/community/Diglin/Ricento/Model/Api/Token.php +8 -6
  88. app/code/community/Diglin/Ricento/Model/Config/Source/Abstract.php +1 -1
  89. app/code/community/Diglin/Ricento/Model/Config/Source/Categories.php +1 -1
  90. app/code/community/Diglin/Ricento/Model/Config/Source/Languages.php +1 -1
  91. app/code/community/Diglin/Ricento/Model/Config/Source/Products/Listing/Log.php +1 -1
  92. app/code/community/Diglin/Ricento/Model/Config/Source/Products/Listing/Status.php +1 -1
  93. app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Payment.php +1 -1
  94. app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping.php +1 -1
  95. app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Availability.php +1 -1
  96. app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Calculation.php +1 -1
  97. app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Packages.php +1 -1
  98. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Currency.php +1 -1
  99. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Days.php +1 -1
  100. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Order/Status.php +1 -1
  101. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Price/Method.php +1 -1
  102. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Price/Source.php +1 -1
  103. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Product/Condition.php +1 -1
  104. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Product/Condition/Source.php +1 -1
  105. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Promotion.php +6 -4
  106. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Reactivation.php +1 -1
  107. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Template.php +1 -1
  108. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Type.php +1 -1
  109. app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Warranty.php +1 -1
  110. app/code/community/Diglin/Ricento/Model/Config/Source/Status.php +1 -1
  111. app/code/community/Diglin/Ricento/Model/Config/Source/Store.php +1 -1
  112. app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Progress.php +1 -1
  113. app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Status.php +1 -1
  114. app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Type.php +3 -4
  115. app/code/community/Diglin/Ricento/Model/Config/Source/Website.php +1 -1
  116. app/code/community/Diglin/Ricento/Model/Cron.php +79 -18
  117. app/code/community/Diglin/Ricento/Model/Dispatcher.php +1 -1
  118. app/code/community/Diglin/Ricento/Model/Dispatcher/Abstract.php +48 -6
  119. app/code/community/Diglin/Ricento/Model/Dispatcher/Check/List.php +2 -121
  120. app/code/community/Diglin/Ricento/Model/Dispatcher/Closed.php +196 -0
  121. app/code/community/Diglin/Ricento/Model/Dispatcher/List.php +129 -95
  122. app/code/community/Diglin/Ricento/Model/Dispatcher/Order.php +408 -337
  123. app/code/community/Diglin/Ricento/Model/Dispatcher/Relist.php +0 -113
  124. app/code/community/Diglin/Ricento/Model/Dispatcher/Stop.php +57 -33
  125. app/code/community/Diglin/Ricento/Model/Dispatcher/Sync/List.php +1 -1
  126. app/code/community/Diglin/Ricento/Model/Entity/Attribute/Source/Conditions.php +1 -1
  127. app/code/community/Diglin/Ricento/Model/Filter.php +1 -1
  128. app/code/community/Diglin/Ricento/Model/Observer.php +15 -1
  129. app/code/community/Diglin/Ricento/Model/Products/Category.php +7 -6
  130. app/code/community/Diglin/Ricento/Model/Products/Category/Mapping.php +7 -2
  131. app/code/community/Diglin/Ricento/Model/Products/Listing.php +22 -67
  132. app/code/community/Diglin/Ricento/Model/Products/Listing/Item.php +241 -127
  133. app/code/community/Diglin/Ricento/Model/Products/Listing/Item/Product.php +218 -92
  134. app/code/community/Diglin/Ricento/Model/Products/Listing/Log.php +2 -1
  135. app/code/community/Diglin/Ricento/Model/Resource/Api/Token.php +1 -1
  136. app/code/community/Diglin/Ricento/Model/Resource/Api/Token/Collection.php +1 -1
  137. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing.php +158 -2
  138. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Collection.php +1 -1
  139. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Item.php +15 -41
  140. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Item/Collection.php +2 -46
  141. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Log.php +1 -1
  142. app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Log/Collection.php +1 -1
  143. app/code/community/Diglin/Ricento/Model/Resource/Rule.php +1 -1
  144. app/code/community/Diglin/Ricento/Model/Resource/Rule/Collection.php +1 -1
  145. app/code/community/Diglin/Ricento/Model/Resource/Sales/Options.php +1 -1
  146. app/code/community/Diglin/Ricento/Model/Resource/Sales/Options/Collection.php +1 -1
  147. app/code/community/Diglin/Ricento/Model/Resource/Sales/Transaction.php +1 -1
  148. app/code/community/Diglin/Ricento/Model/Resource/Sales/Transaction/Collection.php +1 -1
  149. app/code/community/Diglin/Ricento/Model/Resource/Sync/Abstract.php +1 -1
  150. app/code/community/Diglin/Ricento/Model/Resource/Sync/Job.php +1 -1
  151. app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Collection.php +1 -1
  152. app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Listing.php +1 -1
  153. app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Listing/Collection.php +1 -1
  154. app/code/community/Diglin/Ricento/Model/Rule.php +1 -1
  155. app/code/community/Diglin/Ricento/Model/Sales/Method/Payment.php +7 -4
  156. app/code/community/Diglin/Ricento/Model/Sales/Method/Shipping.php +10 -6
  157. app/code/community/Diglin/Ricento/Model/Sales/Options.php +31 -1
  158. app/code/community/Diglin/Ricento/Model/Sales/Order/Create.php +182 -0
  159. app/code/community/Diglin/Ricento/Model/Sales/Order/Exception.php +15 -0
  160. app/code/community/Diglin/Ricento/Model/Sales/Transaction.php +1 -1
  161. app/code/community/Diglin/Ricento/Model/Sync/Abstract.php +1 -1
  162. app/code/community/Diglin/Ricento/Model/Sync/Job.php +8 -9
  163. app/code/community/Diglin/Ricento/Model/Sync/Job/Listing.php +2 -1
  164. app/code/community/Diglin/Ricento/Model/Validate/Products/Item.php +134 -35
  165. app/code/community/Diglin/Ricento/Model/Validate/Rules/Methods.php +1 -1
  166. app/code/community/Diglin/Ricento/Model/Validate/Sales/Increment.php +1 -1
  167. app/code/community/Diglin/Ricento/Test/Model/Rule/Validate.php +1 -1
  168. app/code/community/Diglin/Ricento/Test/Model/Sales/Validate/Increment.php +2 -2
  169. app/code/community/Diglin/Ricento/controllers/.DS_Store +0 -0
  170. app/code/community/Diglin/Ricento/controllers/Adminhtml/AccountController.php +2 -19
  171. app/code/community/Diglin/Ricento/controllers/Adminhtml/ApiController.php +1 -1
  172. app/code/community/Diglin/Ricento/controllers/Adminhtml/DashboardController.php +1 -1
  173. app/code/community/Diglin/Ricento/controllers/Adminhtml/IndexController.php +1 -1
  174. app/code/community/Diglin/Ricento/controllers/Adminhtml/LogController.php +2 -13
  175. app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/CategoryController.php +81 -4
  176. app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/Listing/ItemController.php +5 -3
  177. app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/ListingController.php +100 -44
  178. app/code/community/Diglin/Ricento/controllers/Adminhtml/SupportController.php +30 -3
  179. app/code/community/Diglin/Ricento/controllers/Adminhtml/SyncController.php +1 -1
  180. app/code/community/Diglin/Ricento/data/ricento_setup/data-install-1.0.0.php +1 -1
  181. app/code/community/Diglin/Ricento/data/ricento_setup/data-upgrade-1.0.18-1.1.0.php +28 -0
  182. app/code/community/Diglin/Ricento/etc/adminhtml.xml +19 -7
  183. app/code/community/Diglin/Ricento/etc/config.xml +42 -3
  184. app/code/community/Diglin/Ricento/etc/jstranslator.xml +1 -1
  185. app/code/community/Diglin/Ricento/etc/system.xml +44 -28
  186. app/code/community/Diglin/Ricento/sql/ricento_setup/install-1.0.0.php +1 -1
  187. app/code/community/Diglin/Ricento/sql/ricento_setup/uninstall.php +1 -1
  188. app/code/community/Diglin/Ricento/sql/ricento_setup/upgrade-1.0.18-1.1.0.php +60 -0
  189. app/code/community/Diglin/Ricento/sql/ricento_setup/upgrade-1.0.8-1.0.9.php +1 -1
  190. app/design/adminhtml/default/default/layout/ricento.xml +18 -12
  191. app/design/adminhtml/default/default/template/ricento/dashboard.phtml +1 -1
  192. app/design/adminhtml/default/default/template/ricento/dashboard/account.phtml +1 -1
  193. app/design/adminhtml/default/default/template/ricento/dashboard/banner.phtml +19 -0
  194. app/design/adminhtml/default/default/template/ricento/dashboard/bestsellers.phtml +1 -1
  195. app/design/adminhtml/default/default/template/ricento/dashboard/lifeturnover.phtml +1 -1
  196. app/design/adminhtml/default/default/template/ricento/dashboard/news.phtml +1 -1
  197. app/design/adminhtml/default/default/template/ricento/dashboard/toolbar.phtml +1 -1
  198. app/design/adminhtml/default/default/template/ricento/dashboard/turnover.phtml +1 -1
  199. app/design/adminhtml/default/default/template/ricento/dashboard/turnover/graph.phtml +1 -1
  200. app/design/adminhtml/default/default/template/ricento/iframe.phtml +1 -1
  201. app/design/adminhtml/default/default/template/ricento/js/rules/validate/paymentshipping.phtml +1 -1
  202. app/design/adminhtml/default/default/template/ricento/js/salesoptions/validate/increment.phtml +1 -1
  203. app/design/adminhtml/default/default/template/ricento/js/sync/progress.phtml +1 -1
  204. app/design/adminhtml/default/default/template/ricento/log.phtml +1 -1
  205. app/design/adminhtml/default/default/template/ricento/notifications/configured.phtml +1 -1
  206. app/design/adminhtml/default/default/template/ricento/notifications/expiration.phtml +5 -3
  207. app/design/adminhtml/default/default/template/ricento/payment/info/default.phtml +1 -1
  208. app/design/adminhtml/default/default/template/ricento/payment/info/pdf/default.phtml +1 -1
  209. app/design/adminhtml/default/default/template/ricento/products/category/children.phtml +3 -2
  210. app/design/adminhtml/default/default/template/ricento/products/category/mapping.phtml +8 -9
  211. app/design/adminhtml/default/default/template/ricento/products/category/mapping/tree.phtml +16 -0
  212. app/design/adminhtml/default/default/template/ricento/products/listing/confirmation.phtml +65 -0
  213. app/design/adminhtml/default/default/template/ricento/products/listing/item/edit/form.phtml +1 -1
  214. app/design/adminhtml/default/default/template/ricento/products/listing/item/preview.phtml +1 -1
  215. app/design/adminhtml/default/default/template/ricento/stats.phtml +30 -0
  216. app/design/adminhtml/default/default/template/ricento/support.phtml +9 -6
  217. app/design/adminhtml/default/default/template/ricento/sync/check/popup.phtml +1 -2
  218. app/locale/de_CH/Diglin_Ricento.csv +178 -164
  219. app/locale/de_DE/Diglin_Ricento.csv +172 -158
  220. app/locale/de_DE/template/email/ricento/support.html +6 -0
  221. app/locale/de_DE/template/email/ricento/token_expiration.html +9 -0
  222. app/locale/en_US/Diglin_Ricento.csv +52 -33
  223. app/locale/en_US/template/email/ricento/token_expiration.html +9 -0
  224. app/locale/fr_FR/Diglin_Ricento.csv +413 -403
  225. js/ricento/adminhtml.js +131 -27
  226. lib/Diglin/Ricardo/.DS_Store +0 -0
  227. lib/Diglin/Ricardo/Api.php +2 -3
  228. lib/Diglin/Ricardo/Core/Helper.php +12 -0
  229. lib/Diglin/Ricardo/Enums/.DS_Store +0 -0
  230. lib/Diglin/Ricardo/Enums/SearchErrors.php +58 -0
  231. lib/Diglin/Ricardo/Exceptions/SearchException.php +30 -0
  232. lib/Diglin/Ricardo/Managers/.DS_Store +0 -0
  233. lib/Diglin/Ricardo/Managers/Search.php +41 -0
  234. lib/Diglin/Ricardo/Managers/Search/Parameter/GetCategoryBestMatchParameter.php +133 -0
  235. lib/Diglin/Ricardo/Managers/Sell.php +18 -0
  236. lib/Diglin/Ricardo/Managers/Sell/Parameter/BaseInsertArticleWithTrackingParameter.php +72 -0
  237. lib/Diglin/Ricardo/Managers/Sell/Parameter/CloseArticlesParameter.php +8 -3
  238. lib/Diglin/Ricardo/Managers/Sell/Parameter/ClosePlannedArticleParameter.php +37 -0
  239. lib/Diglin/Ricardo/Managers/Sell/Parameter/DeletePlannedArticleParameter.php +7 -0
  240. lib/Diglin/Ricardo/Managers/Sell/Parameter/DeletePlannedArticlesParameter.php +2 -2
  241. lib/Diglin/Ricardo/Managers/Sell/Parameter/GetArticleFeeParameter.php +253 -0
  242. lib/Diglin/Ricardo/Managers/Sell/Parameter/GetArticlesFeeParameter.php +69 -0
  243. lib/Diglin/Ricardo/Managers/Sell/Parameter/InsertArticlesParameter.php +30 -6
  244. lib/Diglin/Ricardo/Managers/SellerAccount/Parameter/SoldArticlesParameter.php +48 -0
  245. lib/Diglin/Ricardo/Services/Search.php +76 -0
  246. lib/Diglin/Ricardo/Services/Sell.php +56 -1
  247. lib/Diglin/Ricardo/Services/SellerAccount.php +1 -1
  248. package.xml +33 -6
  249. skin/adminhtml/default/default/ricento/css/ricento.css +60 -5
  250. skin/adminhtml/default/default/ricento/images/banner.png +0 -0
  251. skin/adminhtml/default/default/ricento/images/github.png +0 -0
app/code/community/Diglin/Ricento/.DS_Store CHANGED
Binary file
app/code/community/Diglin/Ricento/Block/.DS_Store CHANGED
Binary file
app/code/community/Diglin/Ricento/Block/Adminhtml/.DS_Store ADDED
Binary file
app/code/community/Diglin/Ricento/Block/Adminhtml/Config/Source/Heading.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Config/Source/Hint.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -23,7 +23,7 @@ class Diglin_Ricento_Block_Adminhtml_Config_Source_Hint
23
  {
24
  $html = '<p><a href="http://www.diglin.com/?utm_source=magento&utm_medium=extension&utm_campaign=zopim">'
25
  .'<img style="vertical-align:middle" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAA7CAYAAADM4pCMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADOlJREFUeNrsnV2MG1cVx++MvZs0a+9OygtI0PoBiYKAuKpUCALWI6GqpaLZvESiLY2tSlRFiK6jpg/9wLsBhdKIetPSDyIhOy0tbQR0UwVV8NB1kCDQoNahEWp5Mn2AipdOILE935wzc8Z7dzqz692d/fDu/Wuvxh7Pt3/3zP+eudfLmJCQkJCQkJCQkJCQkJCQkJBQ8pJWstIDjWre7Op5o9vNGZ12wzTMZv1gVROXU2hLgP7wuWeLlmVWTABc73SYgaWLpcv0bnfW1PXyqw/8siUuq9DAgg6Q1yzTLHpgA+Ae6AA4FlOHqaEzQ9c1wzDU14+caYpLKzRwoD907tmqbRqTC6J4x4ecAGcmTHVvamg6wH6+elbALjQ4oD/4x6cKtmXNBYD7sAPgGMUJcJxCJPemumnCa1ODqfruifMCdqFNIXmpBcB3H9TbbQAcShsgb1NE133Y9a4fyXV8DbD7xVQMw6qIyyu0WZReagGwJxMmNjYDy6KTVfGi+Hw0B7iZAdHcj+gWcxy38MLfflCATWh3fP6RTRHZM3v3zkXMLl8+d07cebY96J22glZF7/oRPAy4X3zAEXbTRMgZc2wZAW8A7HNQypsE9kLEPGUTVMAiTA6G50MFVAWi62Rd9F6GZd6uBFHd8+QAercX0X3IbUtmtp5u0CZyUBD2vLjcscpRJQwXoXUDvd1p6gHcPT+OgOsAOERx3exB7iLkpsycbrrpGqkywF2jL1ERsAttbtC7nUY4kvugmxTN5+2KBZDbCLkpq9WjX69KkluEwlsEAbvQ5gQdwD4ODVKtl1npQU6e3ELIJWYbKeZ0hgDytPrEozdXZYBcZq63A3jNCHgBu9DmBP3Vwy+2AO5y4Mf9RidFcssGu+JDbgPkjpFSn37sawS50wMcpx70/nsBu9Dmy7qgXj9ypn7joXEA3KrRAyFm2Q5ALjPLkL1I7pgp9cTjapUxt+i6LnMliWEM914zCQBn9B6KxBSYzL349hH19s99P7FsTGbv3jw14sYjsiln+9zGVMTs+uVz51p9ZE7GqU0S3m8T1p9dg0xNeF8N2E+jj2uUp3XHQx9jx7wL/WxnS4KOeuPxs/Xrvn0jRvSajZDbsh/J2z7ktePjVYC66CDWPOTea4LdhzwAHkGEisHUhACvLpGp6DeLEfWgC7/0Vsy+J2kdZbH9wnK4fjlB4A/GnFMj5vrg8hMRlSMsXKayBse7ua0Lr3dOvFEHyEsOQG7pKWZdGW7aRlp97omvVMGaFNGapCRGVsW3LrLk+LaF0esFNoYVXr44nU8gsr3FNiAdB/uuUQXrJxePgL1Cx7uexzhH12eyD8ijjre27UBHvffchbrdTZesyzualp5WX3zySwQ5B7EHMlsANX4usaACOPOVgbkTq/gSEe4N+SJg3wj4SqCt0XGvl1a7ryKd6/awLrz+/evzdfStv3/3gRp6cjQjkkt2RfJtCtoW7DMWWBfHnf9M4myNb2RWrDjI8baLt9xL3Lw9dFtOAvICRciVqhJlMTaxJuGcjy/VTtlyoKN8yP2I5nWBlDy8AWDy5OTTg3l+Y9SvAAt9PBtLsDEWNBxLMeu4CV23gzHzsXJNB31nYH8TBHXYnhXgMwWW26hRWWW6TlpEBb4vJiDgeZS2jXVB/e6dw7W423YvnUjWRIrw5iEff2mFx74vqiEWB3mClkWJOfdZ2Pd+voMYNeT2x2xqI9OrzahKhpkWPIeYu02BDbCWDfprfz9cgyhcdByX7Em0pA958xDwrAf8Slv1UVHn5Dpcs/wiUZJFwDOIt/vjMY3T7eHRz1z0IefnIexoSyRJigGe0VPRwLtzPp65jduu+9Gy8+iULouMVBvUuGsNsn+N0JYb6N436LNv3V9zbLeIeXBJ9j23HAU8k2LHLUnMf1JKXl2D6UpthhITPTeqK3CLCQ0+6KfeODRpAeSyA3Aj5K6fPsQGpx/N/cIobuOfRJ/FAK/BZ+pNn/rxIAKyR2CzBUE/+YdyzjTdqgzhOyUj6H5xgHTvoQ++jwDeQ95lUbYGb4sA+WNiVI/Q5mmMmoZT0Q2XGaZfTCyWyywststsi/lTLNgf3aH+LFzpNVzdLQH5BYHNFgS9qzsFQ3eYVwB43fSnJge93YPeZQ4HveNB3gNec1w3KchbMY3UwgZdR0WgNOigd+0cwI7AM93wITe8qTMf4c35CI9T22Y96L3xow7TAHT15k8fSySSL5LhWI/cdNQ55Cm/LjSooHc6Nut0bQTeK7oOBSN7ADsB34vyFlkbD3qG0V0D66Le8pljSduVqPz7vriFAcRcQvttxMxfTZcA8buVGw667rTaADsWD/qOQ8A7fjH4SM9FeNODXYOi3nnvX/O7x8c/+MhNX04y4p6OmFeI6U+OqsTcHRrLvJtoMZUMu7ZWwxWqzwrWXOPKKbIuS4LetRspWSqm0xIzoaRTLhsawimUtMxwfioVLi6DdbS0w9R7Dr+ZT6XdmrzDZukhe+6jE19Q35/9SxLRHWGL6iKLwO3jKgL2pYnrh73Sp7LTLPrJLEZ17ACVSJsDNAfbCjqnaVDJZgSyaxTR27pz8gpG9C5GdcezMfMR3vKifM/SUJSHhqsGUV295/638jJCPoyQO0xKO4qUcuY+duCGVUd2iqzTi3j1CpXF+mEfX+G+m4vse6Vtjqg7S46Ov7KYLRNKAPSfHao3APKZy22bIfBXCHQP+K7DWZoe8BpYGHXy4Qt5ecippYYdlh5GyG0EnQHoipxy5z5+x/VJwI4Rrr7C1UurGS4G604lCTuL6SsjtE6go04++HwZYK9fblvsSgB8x4ccI/2V+SivdXVHffDoRYjkAeQ2QW4j5FDwIZOrSJI7d8238knAjt0ISsto0GkEeT2BfSPs6iosUPgusZzzEErSowd6qfJCaf9D38Q8enEYvPkQWJEhmHqvff+uDQ+56k+e+YcP+Q4HPXkvkjME3Ifc6+8iSeCtEfa79qjvPXehuUpI6uRli8zvK56PyZagb68v0Q+8sZysCN0VGpReDAZn8+vhuc0t4zwaZFUKIcul9dGAba32fLjPG1sJ9GX/a5dbDh+oQUOUYCfQh2Rtx7CsPv9yK58a4iAfCiB3mLwAcre3Z1mWteyunerbT2/dH/qMGfChbrWR9gNvXXi9duxU6XLHrv8XbMz//KK1O5b6/KlWLjXkenYl1TfkEgPIlbFsZu7WRw94kfC7p6cL3zvzw9wWgnxCYDaAET3QF+/dH0T2mddnflVWvlr4QB62FfTkcp+QZ3ZdxQByNjo6xrKKwkavvppdlcmWnvzGI/UBALhI1iL2N1AIchyNpUTYFGk7ABY8MV5q2CCOMVjLbtYrHjP652deKX327ttYWpYu7S6MF8CL+5BTo3NRyMGgZ67aycYyIwD5KMuOjbHR3VeznSMjAwE5KUdeusLlzZvkbwtLrFtn20f5uLYCBgsuKZBnazhwJr2alS/+/NVS7s5bp1Ie4I4HOQsiubyg4dmDHLvsjuzayUYhkmchkmfGFJYlyH96W6W+Rb7UpRp60xFf+iRFfhx72uR+dOifmEal94ENmsEIya2DD8WCsbcaLT9Bx8N/NgaflSnKToa2NRVkkri7lfcLY+FjW+zOxi274NfJeKhpHQT/ID39xfl7gsjOnydta4KmLWqwFyiYtPrNnsmr/WZbv/jtlJxymgHkUiiS+2Pp3HnIPxTJd/uQ76tslyhXDndKoy9+ltKV99HsCYSSexqK76domQBShd6fJdDw9bVBpeNz/cFywU910PsZxnWNIMhzwWuCPOrYeO2hZRuhZZVQF4YFr+kanKV1W1yQCJ9nUOGm2PyglwJV0L6ZkZP45v7z2p80gHyGy5MT6MF40QDyHeDJRyCSj0IkH6NInik9NTG1HSBvUKalHmODiov00+nnLhHoUqgtoEUsdy3tazK8PB1LaxnHdpr6+BQ5gBltI+mkwiXO+lWWc73kpI7g/d+cLwPkdZmDnI/kuxDyXiSHhqfi25UBhhyjYYmmjQgP2qR5GFGvx3/Tskg6scFFrWm+Icd3/6X3Obb6h0o4eKRO+6tHHHeBa0hGHluEFfPsC5dlKoQ8dwttCW1zLNxYDTdglzhPvJOV+e2sqUcP618vvVn6xJ15hLy4APKdPuRZsitZtCuZkdLT+6cHNpJTpKwntC0EJOh5OctVpCKb/9Wx4D3fuavBRU8WmteImNfi9lckyGb5Zciv14NjiTm2cLtkgipOi1u2Ttvi9zlBFeA4d47YCQ6v48nQeQdtjVzEeSi0j9Nrnl5cTNfctQcPtAKQ53btHKYUoh/JM6NjjR0jI+UTB46KMaNC66Y1zeV+8u4b8ko2UxgdzSqZbLa5ayTbfOk7J1risgsJCQkJCQkJCQkJCQkJCQkJCQkJCQ2I/i/AAIBJRUJ5hOGjAAAAAElFTkSuQmCC">'
26
- .'</a> Diglin GmbH | Rütistrasse 14, 8952 Schlieren - Switzerland | <a href="mailto:support@diglin.com?subject=Support Diglin ricardo.ch Extension">support@diglin.com</a></p>';
27
 
28
  $buttonSignUp = '';
29
  $website = $this->getRequest()->getParam('website');
@@ -67,7 +67,27 @@ class Diglin_Ricento_Block_Adminhtml_Config_Source_Hint
67
  // do nothing just don't display it as the key may be not yet configured.
68
  }
69
 
 
 
 
 
 
70
 
71
- return $html . '<p>' . $buttonSignUp . '&nbsp;' . $buttonDashboard . '&nbsp;' . $buttonAuthorize .' - <strong>Diglin_Ricento Version: '. Mage::getConfig()->getModuleConfig('Diglin_Ricento')->version .' - Powered by <a href="http://www.diglin.com/?utm_source=magento&utm_medium=extension&utm_campaign=ricento">Diglin GmbH</a></strong></p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
23
  {
24
  $html = '<p><a href="http://www.diglin.com/?utm_source=magento&utm_medium=extension&utm_campaign=zopim">'
25
  .'<img style="vertical-align:middle" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAA7CAYAAADM4pCMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADOlJREFUeNrsnV2MG1cVx++MvZs0a+9OygtI0PoBiYKAuKpUCALWI6GqpaLZvESiLY2tSlRFiK6jpg/9wLsBhdKIetPSDyIhOy0tbQR0UwVV8NB1kCDQoNahEWp5Mn2AipdOILE935wzc8Z7dzqz692d/fDu/Wuvxh7Pt3/3zP+eudfLmJCQkJCQkJCQkJCQkJCQkJBQ8pJWstIDjWre7Op5o9vNGZ12wzTMZv1gVROXU2hLgP7wuWeLlmVWTABc73SYgaWLpcv0bnfW1PXyqw/8siUuq9DAgg6Q1yzTLHpgA+Ae6AA4FlOHqaEzQ9c1wzDU14+caYpLKzRwoD907tmqbRqTC6J4x4ecAGcmTHVvamg6wH6+elbALjQ4oD/4x6cKtmXNBYD7sAPgGMUJcJxCJPemumnCa1ODqfruifMCdqFNIXmpBcB3H9TbbQAcShsgb1NE133Y9a4fyXV8DbD7xVQMw6qIyyu0WZReagGwJxMmNjYDy6KTVfGi+Hw0B7iZAdHcj+gWcxy38MLfflCATWh3fP6RTRHZM3v3zkXMLl8+d07cebY96J22glZF7/oRPAy4X3zAEXbTRMgZc2wZAW8A7HNQypsE9kLEPGUTVMAiTA6G50MFVAWi62Rd9F6GZd6uBFHd8+QAercX0X3IbUtmtp5u0CZyUBD2vLjcscpRJQwXoXUDvd1p6gHcPT+OgOsAOERx3exB7iLkpsycbrrpGqkywF2jL1ERsAttbtC7nUY4kvugmxTN5+2KBZDbCLkpq9WjX69KkluEwlsEAbvQ5gQdwD4ODVKtl1npQU6e3ELIJWYbKeZ0hgDytPrEozdXZYBcZq63A3jNCHgBu9DmBP3Vwy+2AO5y4Mf9RidFcssGu+JDbgPkjpFSn37sawS50wMcpx70/nsBu9Dmy7qgXj9ypn7joXEA3KrRAyFm2Q5ALjPLkL1I7pgp9cTjapUxt+i6LnMliWEM914zCQBn9B6KxBSYzL349hH19s99P7FsTGbv3jw14sYjsiln+9zGVMTs+uVz51p9ZE7GqU0S3m8T1p9dg0xNeF8N2E+jj2uUp3XHQx9jx7wL/WxnS4KOeuPxs/Xrvn0jRvSajZDbsh/J2z7ktePjVYC66CDWPOTea4LdhzwAHkGEisHUhACvLpGp6DeLEfWgC7/0Vsy+J2kdZbH9wnK4fjlB4A/GnFMj5vrg8hMRlSMsXKayBse7ua0Lr3dOvFEHyEsOQG7pKWZdGW7aRlp97omvVMGaFNGapCRGVsW3LrLk+LaF0esFNoYVXr44nU8gsr3FNiAdB/uuUQXrJxePgL1Cx7uexzhH12eyD8ijjre27UBHvffchbrdTZesyzualp5WX3zySwQ5B7EHMlsANX4usaACOPOVgbkTq/gSEe4N+SJg3wj4SqCt0XGvl1a7ryKd6/awLrz+/evzdfStv3/3gRp6cjQjkkt2RfJtCtoW7DMWWBfHnf9M4myNb2RWrDjI8baLt9xL3Lw9dFtOAvICRciVqhJlMTaxJuGcjy/VTtlyoKN8yP2I5nWBlDy8AWDy5OTTg3l+Y9SvAAt9PBtLsDEWNBxLMeu4CV23gzHzsXJNB31nYH8TBHXYnhXgMwWW26hRWWW6TlpEBb4vJiDgeZS2jXVB/e6dw7W423YvnUjWRIrw5iEff2mFx74vqiEWB3mClkWJOfdZ2Pd+voMYNeT2x2xqI9OrzahKhpkWPIeYu02BDbCWDfprfz9cgyhcdByX7Em0pA958xDwrAf8Slv1UVHn5Dpcs/wiUZJFwDOIt/vjMY3T7eHRz1z0IefnIexoSyRJigGe0VPRwLtzPp65jduu+9Gy8+iULouMVBvUuGsNsn+N0JYb6N436LNv3V9zbLeIeXBJ9j23HAU8k2LHLUnMf1JKXl2D6UpthhITPTeqK3CLCQ0+6KfeODRpAeSyA3Aj5K6fPsQGpx/N/cIobuOfRJ/FAK/BZ+pNn/rxIAKyR2CzBUE/+YdyzjTdqgzhOyUj6H5xgHTvoQ++jwDeQ95lUbYGb4sA+WNiVI/Q5mmMmoZT0Q2XGaZfTCyWyywststsi/lTLNgf3aH+LFzpNVzdLQH5BYHNFgS9qzsFQ3eYVwB43fSnJge93YPeZQ4HveNB3gNec1w3KchbMY3UwgZdR0WgNOigd+0cwI7AM93wITe8qTMf4c35CI9T22Y96L3xow7TAHT15k8fSySSL5LhWI/cdNQ55Cm/LjSooHc6Nut0bQTeK7oOBSN7ADsB34vyFlkbD3qG0V0D66Le8pljSduVqPz7vriFAcRcQvttxMxfTZcA8buVGw667rTaADsWD/qOQ8A7fjH4SM9FeNODXYOi3nnvX/O7x8c/+MhNX04y4p6OmFeI6U+OqsTcHRrLvJtoMZUMu7ZWwxWqzwrWXOPKKbIuS4LetRspWSqm0xIzoaRTLhsawimUtMxwfioVLi6DdbS0w9R7Dr+ZT6XdmrzDZukhe+6jE19Q35/9SxLRHWGL6iKLwO3jKgL2pYnrh73Sp7LTLPrJLEZ17ACVSJsDNAfbCjqnaVDJZgSyaxTR27pz8gpG9C5GdcezMfMR3vKifM/SUJSHhqsGUV295/638jJCPoyQO0xKO4qUcuY+duCGVUd2iqzTi3j1CpXF+mEfX+G+m4vse6Vtjqg7S46Ov7KYLRNKAPSfHao3APKZy22bIfBXCHQP+K7DWZoe8BpYGHXy4Qt5ecippYYdlh5GyG0EnQHoipxy5z5+x/VJwI4Rrr7C1UurGS4G604lCTuL6SsjtE6go04++HwZYK9fblvsSgB8x4ccI/2V+SivdXVHffDoRYjkAeQ2QW4j5FDwIZOrSJI7d8238knAjt0ISsto0GkEeT2BfSPs6iosUPgusZzzEErSowd6qfJCaf9D38Q8enEYvPkQWJEhmHqvff+uDQ+56k+e+YcP+Q4HPXkvkjME3Ifc6+8iSeCtEfa79qjvPXehuUpI6uRli8zvK56PyZagb68v0Q+8sZysCN0VGpReDAZn8+vhuc0t4zwaZFUKIcul9dGAba32fLjPG1sJ9GX/a5dbDh+oQUOUYCfQh2Rtx7CsPv9yK58a4iAfCiB3mLwAcre3Z1mWteyunerbT2/dH/qMGfChbrWR9gNvXXi9duxU6XLHrv8XbMz//KK1O5b6/KlWLjXkenYl1TfkEgPIlbFsZu7WRw94kfC7p6cL3zvzw9wWgnxCYDaAET3QF+/dH0T2mddnflVWvlr4QB62FfTkcp+QZ3ZdxQByNjo6xrKKwkavvppdlcmWnvzGI/UBALhI1iL2N1AIchyNpUTYFGk7ABY8MV5q2CCOMVjLbtYrHjP652deKX327ttYWpYu7S6MF8CL+5BTo3NRyMGgZ67aycYyIwD5KMuOjbHR3VeznSMjAwE5KUdeusLlzZvkbwtLrFtn20f5uLYCBgsuKZBnazhwJr2alS/+/NVS7s5bp1Ie4I4HOQsiubyg4dmDHLvsjuzayUYhkmchkmfGFJYlyH96W6W+Rb7UpRp60xFf+iRFfhx72uR+dOifmEal94ENmsEIya2DD8WCsbcaLT9Bx8N/NgaflSnKToa2NRVkkri7lfcLY+FjW+zOxi274NfJeKhpHQT/ID39xfl7gsjOnydta4KmLWqwFyiYtPrNnsmr/WZbv/jtlJxymgHkUiiS+2Pp3HnIPxTJd/uQ76tslyhXDndKoy9+ltKV99HsCYSSexqK76domQBShd6fJdDw9bVBpeNz/cFywU910PsZxnWNIMhzwWuCPOrYeO2hZRuhZZVQF4YFr+kanKV1W1yQCJ9nUOGm2PyglwJV0L6ZkZP45v7z2p80gHyGy5MT6MF40QDyHeDJRyCSj0IkH6NInik9NTG1HSBvUKalHmODiov00+nnLhHoUqgtoEUsdy3tazK8PB1LaxnHdpr6+BQ5gBltI+mkwiXO+lWWc73kpI7g/d+cLwPkdZmDnI/kuxDyXiSHhqfi25UBhhyjYYmmjQgP2qR5GFGvx3/Tskg6scFFrWm+Icd3/6X3Obb6h0o4eKRO+6tHHHeBa0hGHluEFfPsC5dlKoQ8dwttCW1zLNxYDTdglzhPvJOV+e2sqUcP618vvVn6xJ15hLy4APKdPuRZsitZtCuZkdLT+6cHNpJTpKwntC0EJOh5OctVpCKb/9Wx4D3fuavBRU8WmteImNfi9lckyGb5Zciv14NjiTm2cLtkgipOi1u2Ttvi9zlBFeA4d47YCQ6v48nQeQdtjVzEeSi0j9Nrnl5cTNfctQcPtAKQ53btHKYUoh/JM6NjjR0jI+UTB46KMaNC66Y1zeV+8u4b8ko2UxgdzSqZbLa5ayTbfOk7J1risgsJCQkJCQkJCQkJCQkJCQkJCQkJCQ2I/i/AAIBJRUJ5hOGjAAAAAElFTkSuQmCC">'
26
+ .'</a> <a href="http://www.diglin.com/?utm_source=magento&utm_medium=extension&utm_campaign=ricento">Diglin GmbH</a> | Rütistrasse 14, 8952 Schlieren - Switzerland | <a href="mailto:support@diglin.com?subject=Support Diglin ricardo.ch Extension">support@diglin.com</a></p>';
27
 
28
  $buttonSignUp = '';
29
  $website = $this->getRequest()->getParam('website');
67
  // do nothing just don't display it as the key may be not yet configured.
68
  }
69
 
70
+ $buttonSend = '<button type="button" onclick="if(confirm(\'' . $this->__('Do you want to send us your configuration information for support?') . '\')) {window.location.href=\''
71
+ . $this->getUrl('ricento/support/send')
72
+ . '\'}"><span><span>'
73
+ . $this->__('Send us your configuration')
74
+ . '</span></span></button>';
75
 
76
+ $buttonExport = '<button type="button" onclick="window.location.href=\''
77
+ . $this->getUrl('ricento/support/export')
78
+ . '\'"><span><span>'
79
+ . $this->__('Export your configuration')
80
+ . '</span></span></button>';
81
+
82
+ return $html
83
+ . '<p>'
84
+ . $buttonSignUp . '&nbsp;'
85
+ . $buttonDashboard . '&nbsp;'
86
+ . $buttonAuthorize
87
+ .' - <strong>Diglin_Ricento Version: '
88
+ . Mage::getConfig()->getModuleConfig('Diglin_Ricento')->version
89
+ .' </strong>'
90
+ . '&nbsp;' . $buttonSend . '&nbsp;' . $buttonExport
91
+ . '</p>';
92
  }
93
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Account.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
- /*
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
1
  <?php
2
+ /**
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Banner.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Dashboard_Banner
14
+ */
15
+ class Diglin_Ricento_Block_Adminhtml_Dashboard_Banner extends Mage_Core_Block_Template
16
+ {
17
+ /**
18
+ * @var bool
19
+ */
20
+ protected $_xml = false;
21
+
22
+ /**
23
+ * @return bool|string
24
+ */
25
+ public function getBannerXml()
26
+ {
27
+ if (!$this->_xml) {
28
+
29
+ try {
30
+ $url = Mage::getStoreConfig(Diglin_Ricento_Helper_Data::CFG_BANNER_XML);
31
+ $xml = file_get_contents($url);
32
+
33
+ if (!$xml) {
34
+ return false;
35
+ }
36
+
37
+ $this->_xml = new SimpleXMLElement($xml);
38
+
39
+ } catch (Exception $e) {
40
+ return new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?>');
41
+ }
42
+ }
43
+ return $this->_xml;
44
+ }
45
+
46
+ /**
47
+ * @return bool|string
48
+ */
49
+ public function getBannerSrc()
50
+ {
51
+ $url = false;
52
+ $bannerXml = $this->getBannerXml();
53
+
54
+ $helper = Mage::helper('diglin_ricento');
55
+ $lang = strtolower($helper->getDefaultSupportedLang());
56
+
57
+ if ($bannerXml) {
58
+ $url = trim($bannerXml->$lang->url);
59
+ if (strpos($url, 'http') !== false) {
60
+ return $url;
61
+ }
62
+ }
63
+
64
+ return ($url) ? $url : false;
65
+ }
66
+
67
+ public function getBannerUrl()
68
+ {
69
+ $url = false;
70
+ $bannerXml = $this->getBannerXml();
71
+
72
+ $helper = Mage::helper('diglin_ricento');
73
+ $lang = strtolower($helper->getDefaultSupportedLang());
74
+
75
+ if ($bannerXml) {
76
+ $url = trim($bannerXml->$lang->link);
77
+ if (strpos($url, 'http') !== false) {
78
+ return $url;
79
+ }
80
+ }
81
+
82
+ return ($url) ? $url : '#';
83
+ }
84
+
85
+ public function getBannerTitle()
86
+ {
87
+ $url = false;
88
+ $bannerXml = $this->getBannerXml();
89
+
90
+ $helper = Mage::helper('diglin_ricento');
91
+ $lang = strtolower($helper->getDefaultSupportedLang());
92
+
93
+ if ($bannerXml) {
94
+ $url = trim($bannerXml->$lang->title);
95
+ if (strpos($url, 'http') !== false) {
96
+ return $url;
97
+ }
98
+ }
99
+
100
+ return ($url) ? $url : '#';
101
+ }
102
+
103
+ /**
104
+ * @return bool
105
+ */
106
+ public function isEnabled()
107
+ {
108
+ return Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_BANNER);
109
+ }
110
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Bestsellers.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
- /*
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -59,9 +59,9 @@ class Diglin_Ricento_Block_Adminhtml_Dashboard_Bestsellers extends Mage_Adminhtm
59
  $this->addColumn('price', array(
60
  'header' => $helper->__('Price'),
61
  'sortable' => false,
62
- 'type' => 'currency',
63
- 'currency_code' => (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE),
64
- 'index' => 'product_price'
65
  ));
66
 
67
  $this->addColumn('qty', array(
1
  <?php
2
+ /**
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
59
  $this->addColumn('price', array(
60
  'header' => $helper->__('Price'),
61
  'sortable' => false,
62
+ 'type' => 'number',
63
+ 'index' => 'product_price',
64
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_dashboard_renderer_price')
65
  ));
66
 
67
  $this->addColumn('qty', array(
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Lifetime.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
- /*
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -23,7 +23,6 @@ class Diglin_Ricento_Block_Adminhtml_Dashboard_Lifetime extends Mage_Adminhtml_B
23
  {
24
  /** @var Diglin_Ricento_Model_Resource_Sales_Transaction $transactionResource */
25
  $transactionResource = Mage::getResourceModel('diglin_ricento/sales_transaction');
26
-
27
- return Mage::helper('core')->formatCurrency($transactionResource->getTotalSalesValue());
28
  }
29
- }
1
  <?php
2
+ /**
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
23
  {
24
  /** @var Diglin_Ricento_Model_Resource_Sales_Transaction $transactionResource */
25
  $transactionResource = Mage::getResourceModel('diglin_ricento/sales_transaction');
26
+ return implode(' / ', Mage::helper('diglin_ricento/price')->formatDoubleCurrency($transactionResource->getTotalSalesValue(), null, Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY));
 
27
  }
28
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Renderer/Price.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Dashboard_Renderer_Price
14
+ */
15
+ class Diglin_Ricento_Block_Adminhtml_Dashboard_Renderer_Price extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
16
+ {
17
+ /**
18
+ * @param Varien_Object $row
19
+ * @return string
20
+ */
21
+ public function render(Varien_Object $row)
22
+ {
23
+ $websiteId = $row->getWebsiteId();
24
+
25
+ if (Mage::registry('products_listing')) {
26
+ $websiteId = Mage::registry('products_listing')->getWebsiteId();
27
+ }
28
+
29
+ $value = $this->_getValue($row);
30
+ if (!empty($value)) {
31
+ return implode(' / ', Mage::helper('diglin_ricento/price')->formatDoubleCurrency($value, $websiteId));
32
+ }
33
+ return $value;
34
+ }
35
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Dashboard/Turnover.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
- /*
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
1
  <?php
2
+ /**
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Form/.DS_Store ADDED
Binary file
app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/.DS_Store ADDED
Binary file
app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Checkboxes/Extensible.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Fieldset/Inline.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Form/Element/Radios/Extensible.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -41,7 +41,7 @@ class Diglin_Ricento_Block_Adminhtml_Form_Element_Radios_Extensible extends Vari
41
 
42
  public function getElementHtml()
43
  {
44
- $html = '<ul ' . $this->serialize(array('list_class', 'list_id')) . '>';
45
  $html .= parent::getElementHtml();
46
  $html .= '</ul>';
47
  return $html;
@@ -53,6 +53,11 @@ class Diglin_Ricento_Block_Adminhtml_Form_Element_Radios_Extensible extends Vari
53
  $field = $this->getField($option['field']);
54
  if (strpos($option['label'], '%s') !== false) {
55
  $html = parent::_optionToHtml($option, $selected);
 
 
 
 
 
56
  return '<li>' . preg_replace_callback('#(<label [^>]*for="\w+"[^>]*>)(.*)</label>#', function ($matches) use ($field) {
57
  $labelTag = $matches[1];
58
  $labelText = $matches[2];
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
41
 
42
  public function getElementHtml()
43
  {
44
+ $html = '<ul>';
45
  $html .= parent::getElementHtml();
46
  $html .= '</ul>';
47
  return $html;
53
  $field = $this->getField($option['field']);
54
  if (strpos($option['label'], '%s') !== false) {
55
  $html = parent::_optionToHtml($option, $selected);
56
+
57
+ // fix small issue with white spaces btw. attributes
58
+ $html = str_replace('"value=', '" value=', $html);
59
+ $html = str_replace('"radio"', '"radio" ', $html);
60
+
61
  return '<li>' . preg_replace_callback('#(<label [^>]*for="\w+"[^>]*>)(.*)</label>#', function ($matches) use ($field) {
62
  $labelTag = $matches[1];
63
  $labelText = $matches[2];
app/code/community/Diglin/Ricento/Block/Adminhtml/Log.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -31,7 +31,7 @@ class Diglin_Ricento_Block_Adminhtml_Log extends Mage_Adminhtml_Block_Widget_Con
31
 
32
  $this->addButton('show_listing', array(
33
  'label' => $this->__('Show Products Listing'),
34
- 'onclick' => 'setLocation(\''.$this->getUrl('*/products_listing/index').'\')',
35
  ));
36
  }
37
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
31
 
32
  $this->addButton('show_listing', array(
33
  'label' => $this->__('Show Products Listing'),
34
+ 'onclick' => 'setLocation(\''.$this->getUrl('*/products_listing/index') .'\')',
35
  ));
36
  }
37
 
app/code/community/Diglin/Ricento/Block/Adminhtml/{Products/Listing/Log → Log/Listing}/Grid.php RENAMED
@@ -5,10 +5,10 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Log_Grid extends Mage_Adminhtml_Block_Widget_Grid
12
  {
13
  public function __construct()
14
  {
@@ -121,7 +121,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Log_Grid extends Mage_Admi
121
  /**
122
  * Prepare the mass action drop down menu
123
  *
124
- * @return Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid
125
  */
126
  protected function _prepareMassaction()
127
  {
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
+ class Diglin_Ricento_Block_Adminhtml_Log_Listing_Grid extends Mage_Adminhtml_Block_Widget_Grid
12
  {
13
  public function __construct()
14
  {
121
  /**
122
  * Prepare the mass action drop down menu
123
  *
124
+ * @return Diglin_Ricento_Block_Adminhtml_Log_Listing_Grid
125
  */
126
  protected function _prepareMassaction()
127
  {
app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid.php RENAMED
@@ -5,10 +5,10 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
- class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_Widget_Grid
12
  {
13
  public function __construct()
14
  {
@@ -24,6 +24,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
24
  /* @var $collection Diglin_Ricento_Model_Resource_Sync_Job_Collection */
25
  $collection = Mage::getResourceModel('diglin_ricento/sync_job_collection');
26
  $collection
 
27
  ->join(array('sjl' => 'diglin_ricento/sync_job_listing'), 'sjl.job_id = main_table.job_id', 'products_listing_id')
28
  ->join(array('pl' => 'diglin_ricento/products_listing'), 'pl.entity_id = sjl.products_listing_id', 'title');
29
 
@@ -38,7 +39,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
38
  'align' => 'left',
39
  'index' => 'job_id',
40
  'type' => 'number',
41
- 'filter' => false,
42
  'width' => 50
43
  ));
44
 
@@ -48,7 +49,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
48
  'index' => 'job_type',
49
  'type' => 'options',
50
  'width' => 150,
51
- 'options' => Mage::getSingleton('diglin_ricento/config_source_sync_type')->toOptionHash()
52
  ));
53
 
54
  $this->addColumn('title', array(
@@ -57,7 +58,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
57
  'index' => 'title',
58
  'type' => 'text',
59
  'width' => 150,
60
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_sync_log_grid_renderer_title')
61
  ));
62
 
63
  $this->addColumn('job_message', array(
@@ -75,7 +76,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
75
  'sortable' => false,
76
  'filter' => false,
77
  'width' => 150,
78
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_sync_log_grid_renderer_progress')
79
  ));
80
 
81
  $this->addColumn('job_status', array(
@@ -132,7 +133,7 @@ class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid extends Mage_Adminhtml_Block_
132
  /**
133
  * Prepare the mass action drop down menu
134
  *
135
- * @return Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid
136
  */
137
  protected function _prepareMassaction()
138
  {
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
+ class Diglin_Ricento_Block_Adminhtml_Log_Sync_Grid extends Mage_Adminhtml_Block_Widget_Grid
12
  {
13
  public function __construct()
14
  {
24
  /* @var $collection Diglin_Ricento_Model_Resource_Sync_Job_Collection */
25
  $collection = Mage::getResourceModel('diglin_ricento/sync_job_collection');
26
  $collection
27
+ ->addFieldToFilter('job_type', array('nin' => array(Diglin_Ricento_Model_Sync_Job::TYPE_SYNCLIST, Diglin_Ricento_Model_Sync_Job::TYPE_CLOSED)))
28
  ->join(array('sjl' => 'diglin_ricento/sync_job_listing'), 'sjl.job_id = main_table.job_id', 'products_listing_id')
29
  ->join(array('pl' => 'diglin_ricento/products_listing'), 'pl.entity_id = sjl.products_listing_id', 'title');
30
 
39
  'align' => 'left',
40
  'index' => 'job_id',
41
  'type' => 'number',
42
+ 'filter' => false,
43
  'width' => 50
44
  ));
45
 
49
  'index' => 'job_type',
50
  'type' => 'options',
51
  'width' => 150,
52
+ 'options' => Mage::getSingleton('diglin_ricento/config_source_sync_type')->toOptionHash()
53
  ));
54
 
55
  $this->addColumn('title', array(
58
  'index' => 'title',
59
  'type' => 'text',
60
  'width' => 150,
61
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_log_sync_grid_renderer_title')
62
  ));
63
 
64
  $this->addColumn('job_message', array(
76
  'sortable' => false,
77
  'filter' => false,
78
  'width' => 150,
79
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_log_sync_grid_renderer_progress')
80
  ));
81
 
82
  $this->addColumn('job_status', array(
133
  /**
134
  * Prepare the mass action drop down menu
135
  *
136
+ * @return Diglin_Ricento_Block_Adminhtml_Log_Sync_Grid
137
  */
138
  protected function _prepareMassaction()
139
  {
app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid/Renderer/Progress.php RENAMED
@@ -5,10 +5,10 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
- class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid_Renderer_Progress extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
12
  {
13
  /**
14
  * @param Varien_Object $row
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
+ class Diglin_Ricento_Block_Adminhtml_Log_Sync_Grid_Renderer_Progress extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
12
  {
13
  /**
14
  * @param Varien_Object $row
app/code/community/Diglin/Ricento/Block/Adminhtml/{Sync/Log → Log/Sync}/Grid/Renderer/Title.php RENAMED
@@ -5,10 +5,10 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
- class Diglin_Ricento_Block_Adminhtml_Sync_Log_Grid_Renderer_Title extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
12
  {
13
  /**
14
  * @param Varien_Object $row
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
+ class Diglin_Ricento_Block_Adminhtml_Log_Sync_Grid_Renderer_Title extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
12
  {
13
  /**
14
  * @param Varien_Object $row
app/code/community/Diglin/Ricento/Block/Adminhtml/Log/Tabs.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Log_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
@@ -42,7 +42,7 @@ class Diglin_Ricento_Block_Adminhtml_Log_Tabs extends Mage_Adminhtml_Block_Widge
42
  );
43
 
44
  if ($this->getData('active_tab') == self::TAB_LISTING) {
45
- $tab['content'] = $this->getLayout()->createBlock('diglin_ricento/adminhtml_products_listing_log_grid', 'ricento_listing_log')->toHtml();
46
  } else {
47
  $tab['url'] = $this->getUrl('*/log/listing');
48
  }
@@ -59,7 +59,7 @@ class Diglin_Ricento_Block_Adminhtml_Log_Tabs extends Mage_Adminhtml_Block_Widge
59
  );
60
 
61
  if ($this->getData('active_tab') == self::TAB_SYNCHRONIZATION) {
62
- $tab['content'] = $this->getLayout()->createBlock('diglin_ricento/adminhtml_sync_log_grid', 'ricento_sync_log')->toHtml();
63
  } else {
64
  $tab['url'] = $this->getUrl('*/log/sync');
65
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Log_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
42
  );
43
 
44
  if ($this->getData('active_tab') == self::TAB_LISTING) {
45
+ $tab['content'] = $this->getLayout()->createBlock('diglin_ricento/adminhtml_log_listing_grid', 'ricento_listing_log')->toHtml();
46
  } else {
47
  $tab['url'] = $this->getUrl('*/log/listing');
48
  }
59
  );
60
 
61
  if ($this->getData('active_tab') == self::TAB_SYNCHRONIZATION) {
62
+ $tab['content'] = $this->getLayout()->createBlock('diglin_ricento/adminhtml_log_sync_grid', 'ricento_sync_log')->toHtml();
63
  } else {
64
  $tab['url'] = $this->getUrl('*/log/sync');
65
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Notifications/Default.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Notifications/Expiration.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -33,7 +33,7 @@ class Diglin_Ricento_Block_Adminhtml_Notifications_Expiration extends Diglin_Ric
33
  */
34
  public function isApiGoExpire($website = 0)
35
  {
36
- return (bool) Mage::helper('diglin_ricento/api')->isApiTokenCredentialGoingToExpire($website);
37
  }
38
 
39
  /**
@@ -42,7 +42,7 @@ class Diglin_Ricento_Block_Adminhtml_Notifications_Expiration extends Diglin_Ric
42
  */
43
  public function isApiCredentialTokenExist($website = 0)
44
  {
45
- return (bool) Mage::helper('diglin_ricento/api')->isApiTokenCredentialExists($website);
46
  }
47
 
48
  /**
@@ -51,9 +51,27 @@ class Diglin_Ricento_Block_Adminhtml_Notifications_Expiration extends Diglin_Ric
51
  */
52
  public function getExpirationNotificationDelay($storeId = 0)
53
  {
54
- return (int) Mage::helper('diglin_ricento')->getExpirationNotificationDelay($storeId);
55
  }
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  /**
58
  * @return array
59
  */
@@ -103,4 +121,30 @@ class Diglin_Ricento_Block_Adminhtml_Notifications_Expiration extends Diglin_Ric
103
  {
104
  return (bool) $this->_apiReady;
105
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
33
  */
34
  public function isApiGoExpire($website = 0)
35
  {
36
+ return (bool) $this->getApiHelper()->apiTokenCredentialGoingToExpire($website);
37
  }
38
 
39
  /**
42
  */
43
  public function isApiCredentialTokenExist($website = 0)
44
  {
45
+ return (bool) $this->getApiHelper()->apiTokenCredentialExists($website);
46
  }
47
 
48
  /**
51
  */
52
  public function getExpirationNotificationDelay($storeId = 0)
53
  {
54
+ return (int) $this->getRicentoHelper()->getExpirationNotificationDelay($storeId);
55
  }
56
 
57
+ /**
58
+ * @param int $website
59
+ * @return int
60
+ */
61
+ public function canApiAuthorizationBeTriggered($website = 0)
62
+ {
63
+ return (int) $this->getApiHelper()->apiTokenCredentialValidation($website);
64
+ }
65
+
66
+ /**
67
+ * @param int $storeId
68
+ * @return int
69
+ */
70
+ public function getExpirationNotificationValidationDelay($storeId = 0)
71
+ {
72
+ return (int) $this->getRicentoHelper()->getExpirationNotificationValidationDelay($storeId);
73
+ }
74
+
75
  /**
76
  * @return array
77
  */
121
  {
122
  return (bool) $this->_apiReady;
123
  }
124
+
125
+ /**
126
+ * @return Diglin_Ricento_Helper_Api
127
+ */
128
+ public function getApiHelper()
129
+ {
130
+ return Mage::helper('diglin_ricento/api');
131
+ }
132
+
133
+ /**
134
+ * @return Diglin_Ricento_Helper_Data
135
+ */
136
+ public function getRicentoHelper()
137
+ {
138
+ return Mage::helper('diglin_ricento');
139
+ }
140
+
141
+ /**
142
+ * @param int $website
143
+ * @return float
144
+ */
145
+ public function getDelayExpirationDays($website = 0)
146
+ {
147
+ $expirationDate = Mage::getSingleton('core/date')->timestamp($this->getApiHelper()->getExpirationDate($website));
148
+ return round(($expirationDate - time()) / (24 * 3600), 0, PHP_ROUND_HALF_UP) + 0;
149
+ }
150
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Page/Menu.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * @category Diglin
6
  * @package Diglin_Ricento
7
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
8
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
  */
10
  class Diglin_Ricento_Block_Adminhtml_Page_Menu extends Mage_Adminhtml_Block_Page_Menu
4
  *
5
  * @category Diglin
6
  * @package Diglin_Ricento
7
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
8
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
  */
10
  class Diglin_Ricento_Block_Adminhtml_Page_Menu extends Mage_Adminhtml_Block_Page_Menu
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Children.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -16,9 +16,12 @@
16
  * @method int getLevel() getLevel()
17
  * @method int getCategoryId() getCategoryId()
18
  * @method int getSelectedCategoryId() getSelectedCategoryId()
 
 
19
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setLevel() setLevel(int $level)
20
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setCategoryId() setCategoryId(int $categoryId)
21
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setSelectedCategoryId() setSelectedCategoryId(int $categoryId)
 
22
  */
23
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Children extends Mage_Adminhtml_Block_Template
24
  {
@@ -33,7 +36,6 @@ class Diglin_Ricento_Block_Adminhtml_Products_Category_Children extends Mage_Adm
33
  {
34
  /* @var $mapping Diglin_Ricento_Model_Products_Category_Mapping */
35
  $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
36
-
37
  return $mapping->getCategories($this->getCategoryId());
38
  }
39
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
16
  * @method int getLevel() getLevel()
17
  * @method int getCategoryId() getCategoryId()
18
  * @method int getSelectedCategoryId() getSelectedCategoryId()
19
+ * @method array getSuggestedCategoriesId()
20
+ *
21
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setLevel() setLevel(int $level)
22
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setCategoryId() setCategoryId(int $categoryId)
23
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setSelectedCategoryId() setSelectedCategoryId(int $categoryId)
24
+ * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping_Tree setSuggestedCategoriesId(array $suggestedCategoriesId)
25
  */
26
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Children extends Mage_Adminhtml_Block_Template
27
  {
36
  {
37
  /* @var $mapping Diglin_Ricento_Model_Products_Category_Mapping */
38
  $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
 
39
  return $mapping->getCategories($this->getCategoryId());
40
  }
41
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Form/Renderer/Categories.php CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
 
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Form/Renderer/Mapping.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Form_Renderer_Mapping
@@ -27,8 +27,9 @@ class Diglin_Ricento_Block_Adminhtml_Products_Category_Form_Renderer_Mapping
27
  }
28
 
29
  $this->addClass('button');
 
30
  $html = '<span id="'.$this->getHtmlId().'_title" class="ricardo_categories_title">' . $text . '</span>';
31
- $html .= '<button type="button"' . $this->serialize($this->getHtmlAttributes())
32
  . ' onclick="Ricento.categoryMappingPopup(\''
33
  . Mage::helper('adminhtml')->getUrl('ricento/products_category/mapping', array('id' => '#ID#'))
34
  . '\', $(\''. $this->getHtmlId() .'\'), $(\''. $this->getHtmlId() .'_title\'))"'
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Form_Renderer_Mapping
27
  }
28
 
29
  $this->addClass('button');
30
+
31
  $html = '<span id="'.$this->getHtmlId().'_title" class="ricardo_categories_title">' . $text . '</span>';
32
+ $html .= '<button type="button" ' . $this->serialize($this->getHtmlAttributes())
33
  . ' onclick="Ricento.categoryMappingPopup(\''
34
  . Mage::helper('adminhtml')->getUrl('ricento/products_category/mapping', array('id' => '#ID#'))
35
  . '\', $(\''. $this->getHtmlId() .'\'), $(\''. $this->getHtmlId() .'_title\'))"'
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Mapping.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -13,53 +13,16 @@
13
  * Class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping
14
  * Mapping from the Ricardo categories
15
  *
16
- * @method int getCategoryId() getCategoryId()
17
  * @method int getLevels() getLevels()
18
- * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setCategoryId() setCategoryId(int $categoryId)
19
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setLevels() setLevels(int $levels)
20
  *
21
  */
22
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping extends Mage_Adminhtml_Block_Template
23
  {
24
- protected function _beforeToHtml()
25
- {
26
- $this->setChild('toplevel',
27
- $this->getLayout()
28
- ->createBlock('diglin_ricento/adminhtml_products_category_children')
29
- ->setTemplate('ricento/products/category/children.phtml')
30
- ->setLevel(1)
31
- ->setCategoryId(1)
32
- );
33
-
34
- $this->setChild('sublevel',
35
- $this->getLayout()->createBlock('core/text_list')
36
- );
37
-
38
- if ($this->getCategoryId() != Diglin_Ricento_Model_Products_Category_Mapping::ROOT_CATEGORY_ID) {
39
-
40
- /* @var $mapping Diglin_Ricento_Model_Products_Category_Mapping */
41
- $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
42
- $category = $mapping->getCategory($this->getCategoryId());
43
- $this->setLevels($category ? $category->getLevel() : 1);
44
-
45
- while ($category && $category->getParentId() != Diglin_Ricento_Model_Products_Category_Mapping::ROOT_CATEGORY_ID) {
46
- $this->getChild('sublevel')->insert(
47
- $this->getLayout()
48
- ->createBlock('diglin_ricento/adminhtml_products_category_children')
49
- ->setLevel($category->getLevel())
50
- ->setCategoryId($category->getParentId())
51
- ->setSelectedCategoryId($category->getId()),
52
- '', false, 'sublevel-' . $category->getLevel()
53
- );
54
- $category = $mapping->getCategory($category->getParentId()); //TODO reference parent from child
55
- }
56
-
57
- if ($category) {
58
- $this->getChild('toplevel')->setSelectedCategoryId($category->getId());
59
- }
60
- }
61
- return parent::_beforeToHtml();
62
- }
63
 
64
  /**
65
  * Determine if the columns have to be resized
@@ -68,7 +31,20 @@ class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping extends Mage_Admi
68
  */
69
  public function shouldResize()
70
  {
71
- return $this->getLevels() >= 5;
 
 
 
 
 
 
72
  }
73
 
 
 
 
 
 
 
 
74
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
13
  * Class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping
14
  * Mapping from the Ricardo categories
15
  *
 
16
  * @method int getLevels() getLevels()
 
17
  * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Children setLevels() setLevels(int $levels)
18
  *
19
  */
20
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping extends Mage_Adminhtml_Block_Template
21
  {
22
+ /**
23
+ * @var string
24
+ */
25
+ protected $_template = 'ricento/products/category/mapping.phtml';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  /**
28
  * Determine if the columns have to be resized
31
  */
32
  public function shouldResize()
33
  {
34
+ /* @var $mapping Diglin_Ricento_Model_Products_Category_Mapping */
35
+ $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
36
+ $category = $mapping->getCategory($this->getCategoryId());
37
+
38
+ $this->setLevels(($category ? $category->getLevel() : 1));
39
+
40
+ return ($this->getLevels() >= 5);
41
  }
42
 
43
+ /**
44
+ * @return string
45
+ */
46
+ public function getSuggestUrl()
47
+ {
48
+ return $this->getUrl('*/products_category/suggest');
49
+ }
50
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Mapping/Tree.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping_Tree
14
+ *
15
+ *
16
+ * @method int getCategoryId()
17
+ * @method array getSuggestedCategoriesId()
18
+ * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping_Tree setSuggestedCategoriesId(array $suggestedCategoriesId)
19
+ * @method Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping_Tree setCategoryId(int $categoryId)
20
+ */
21
+ class Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping_Tree extends Mage_Core_Block_Template
22
+ {
23
+ protected $_template = 'ricento/products/category/mapping/tree.phtml';
24
+
25
+ protected function _beforeToHtml()
26
+ {
27
+ $this->setChild('toplevel',
28
+ $this->getLayout()
29
+ ->createBlock('diglin_ricento/adminhtml_products_category_children')
30
+ ->setLevel(1)
31
+ ->setCategoryId(1)
32
+ ->setSuggestedCategoriesId($this->getSuggestedCategoriesId())
33
+ );
34
+
35
+ $this->setChild('sublevel',
36
+ $this->getLayout()->createBlock('core/text_list')
37
+ );
38
+
39
+ if ($this->getCategoryId() != Diglin_Ricento_Model_Products_Category_Mapping::ROOT_CATEGORY_ID) {
40
+
41
+ /* @var $mapping Diglin_Ricento_Model_Products_Category_Mapping */
42
+ $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
43
+ $category = $mapping->getCategory($this->getCategoryId());
44
+
45
+ if ($this->getParentBlock()) {
46
+ $this->getParentBlock()->setLevels(($category ? $category->getLevel() : 1));
47
+ }
48
+
49
+ $this->setLevels(($category ? $category->getLevel() : 1));
50
+
51
+ while ($category && $category->getParentId() != Diglin_Ricento_Model_Products_Category_Mapping::ROOT_CATEGORY_ID) {
52
+ $this->getChild('sublevel')->insert(
53
+ $this->getLayout()
54
+ ->createBlock('diglin_ricento/adminhtml_products_category_children')
55
+ ->setLevel($category->getLevel())
56
+ ->setCategoryId($category->getParentId())
57
+ ->setSelectedCategoryId($category->getId())
58
+ ->setSuggestedCategoriesId($this->getSuggestedCategoriesId()),
59
+ '', false, 'sublevel-' . $category->getLevel()
60
+ );
61
+ $category = $mapping->getCategory($category->getParentId()); //TODO reference parent from child
62
+ }
63
+
64
+ if ($category) {
65
+ $this->getChild('toplevel')->setSelectedCategoryId($category->getId());
66
+ }
67
+ }
68
+ return parent::_beforeToHtml();
69
+ }
70
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree extends Mage_Adminhtml_Block_Widget_Form_Container
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree extends Mage_Adminhtml_Block_Widget_Form_Container
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree/Categories.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree_Categories extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Categories
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree_Categories extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Categories
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Category/Tree/Form.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree_Form extends Diglin_Ricento_Block_Adminhtml_Products_Listing_Form_Abstract
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Category_Tree_Form extends Diglin_Ricento_Block_Adminhtml_Products_Listing_Form_Abstract
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Confirmation.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Diglin GmbH - Switzerland
5
+ *
6
+ * @author Sylvain Rayé <sylvain.raye at diglin.com>
7
+ * @category Ricento
8
+ * @package Ricento
9
+ * @copyright Copyright (c) 2011-2014 Diglin (http://www.diglin.com)
10
+ */
11
+
12
+ use Diglin\Ricardo\Enums\Article\PromotionCode;
13
+
14
+ /**
15
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Confirmation
16
+ */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Confirmation extends Mage_Adminhtml_Block_Template
18
+ {
19
+ /**
20
+ * @var string
21
+ */
22
+ protected $_template = 'ricento/products/listing/confirmation.phtml';
23
+
24
+ /**
25
+ * @var int
26
+ */
27
+ protected $_totalFee = 0;
28
+
29
+ /**
30
+ * @var array
31
+ */
32
+ protected $_listingFees = array('total_price' => 0, 'qty' => 0);
33
+
34
+ /**
35
+ * @return array
36
+ */
37
+ public function getArticleFees()
38
+ {
39
+ $preparedArticleFees = array();
40
+ $articleFees = $this->getData('article_fees');
41
+ if (count($articleFees)) {
42
+ foreach ($articleFees as $fee) {
43
+ $this->_listingFees['total_price'] += $fee['ListingFee'];
44
+ $this->_listingFees['qty'] += 1;
45
+ $this->_totalFee += $fee['TotalFee'];
46
+
47
+ foreach ($fee['PromotionFees'] as $promotionFees) {
48
+ if ($promotionFees['PromotionFee'] > 0) {
49
+ $preparedArticleFees[$promotionFees['PromotionId']]['label'] = $this->__(PromotionCode::getLabel($promotionFees['PromotionId']));
50
+ @$preparedArticleFees[$promotionFees['PromotionId']]['total_price'] += $promotionFees['PromotionFee'];
51
+ @$preparedArticleFees[$promotionFees['PromotionId']]['qty'] += 1;
52
+ $preparedArticleFees[$promotionFees['PromotionId']]['unit_price'] = $this->getUnitPrice($preparedArticleFees[$promotionFees['PromotionId']]['total_price'], $preparedArticleFees[$promotionFees['PromotionId']]['qty']);
53
+ }
54
+ }
55
+ }
56
+
57
+ $this->_listingFees['unit_price'] = $this->getUnitPrice($this->_listingFees['total_price'], $this->_listingFees['qty']);
58
+ }
59
+
60
+ return $preparedArticleFees;
61
+ }
62
+
63
+ /**
64
+ * @param $price
65
+ * @param $qty
66
+ * @return float
67
+ */
68
+ public function getUnitPrice($price, $qty)
69
+ {
70
+ return round($price / $qty, 2, PHP_ROUND_HALF_UP);
71
+ }
72
+
73
+ /**
74
+ * @return string
75
+ */
76
+ public function getFeesRulesUrl()
77
+ {
78
+ return Mage::helper('diglin_ricento')->getFeesRulesUrl();
79
+ }
80
+
81
+ /**
82
+ * @return string
83
+ */
84
+ public function getTermsUrl()
85
+ {
86
+ return Mage::helper('diglin_ricento')->getTermsUrl();
87
+ }
88
+
89
+ /**
90
+ * @return string
91
+ */
92
+ public function getPrivacyUrl()
93
+ {
94
+ return Mage::helper('diglin_ricento')->getPrivacyUrl();
95
+ }
96
+
97
+ /**
98
+ * @return int
99
+ */
100
+ public function getProductsListingId()
101
+ {
102
+ return Mage::registry('products_listing')->getId();
103
+ }
104
+
105
+ public function getFormUrl()
106
+ {
107
+ return $this->getUrl('*/*/checkandlist');
108
+ }
109
+
110
+ /**
111
+ * @return array
112
+ */
113
+ public function getListingFees()
114
+ {
115
+ return $this->_listingFees;
116
+ }
117
+
118
+ /**
119
+ * @return int
120
+ */
121
+ public function getTotalFee()
122
+ {
123
+ return $this->formatPrice($this->_totalFee);
124
+ }
125
+
126
+ /**
127
+ * @param $price
128
+ * @return float
129
+ * @throws Exception
130
+ */
131
+ public function formatPrice($price)
132
+ {
133
+ $helperPrice = Mage::helper('diglin_ricento/price');
134
+ return implode(' / ', $helperPrice->formatDoubleCurrency($price, Mage::registry('products_listing')->getWebsiteId(), Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY));
135
+ }
136
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -45,7 +45,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit extends Mage_Adminhtm
45
  $this->_addButton('check_and_list', array(
46
  'label' => $this->__('Check & List'),
47
  'title' => $this->__('Check & list only pending & error items'),
48
- 'onclick' => 'editForm.submit(\'' . $this->getCheckAndListUrl() . '\');',
49
  'class' => 'list success'
50
  ), -1, 3);
51
 
@@ -121,6 +121,16 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit extends Mage_Adminhtm
121
  return $this->getUrl('ricento/products_listing/checkAndList', array('id' => $this->getListingId()));
122
  }
123
 
 
 
 
 
 
 
 
 
 
 
124
  /**
125
  * Returns URL for "save and list" form action
126
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
45
  $this->_addButton('check_and_list', array(
46
  'label' => $this->__('Check & List'),
47
  'title' => $this->__('Check & list only pending & error items'),
48
+ 'onclick' => "Ricento.confirmationPopup('{$this->getConfirmationUrl()}')",
49
  'class' => 'list success'
50
  ), -1, 3);
51
 
121
  return $this->getUrl('ricento/products_listing/checkAndList', array('id' => $this->getListingId()));
122
  }
123
 
124
+ /**
125
+ * Get confirmation Url
126
+ *
127
+ * @return string
128
+ */
129
+ public function getConfirmationUrl()
130
+ {
131
+ return $this->getUrl('ricento/products_listing/confirmation', array('id' => $this->getListingId()));
132
+ }
133
+
134
  /**
135
  * Returns URL for "save and list" form action
136
  *
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Form.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Article.php RENAMED
@@ -5,16 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Article
14
  *
15
  * Renderer for column ricardo article id for configurable product
16
  */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Article
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
@@ -24,7 +24,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Rendere
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
- if ($row->getTypeId() == Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Article
14
  *
15
  * Renderer for column ricardo article id for configurable product
16
  */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Article
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
+ if ($row->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Configured.php RENAMED
@@ -5,16 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Customoptions
14
  *
15
  * Renderer for column with configured rules or sales
16
  */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Configured
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Configured
14
  *
15
  * Renderer for column with configured rules or sales
16
  */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Configured
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Customoptions.php RENAMED
@@ -5,16 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Customoptions
14
  *
15
  * Renderer for column with warning about custom options
16
  */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Customoptions
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Customoptions
14
  *
15
  * Renderer for column with warning about custom options
16
  */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Customoptions
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Renderer/Inventory.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Inventory
14
+ *
15
+ * Renderer for column name for configurable product
16
+ */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Inventory
18
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
+ {
20
+ /**
21
+ * @todo display a color depending if the planned inventory is really in stock or not
22
+ * - green: in stock
23
+ * - orange: lower than the wished quantity to be listed
24
+ * - red: not in stock
25
+ *
26
+ * @param Varien_Object $row
27
+ * @return string
28
+ */
29
+ public function render(Varien_Object $row)
30
+ {
31
+ // $value = $this->_getValue($row);
32
+ if ($row->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
33
+ $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
34
+ $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
35
+
36
+ $value = '';
37
+ $inventory = array();
38
+ foreach ($itemCollection->getItems() as $item) {
39
+ $item->setLoadFallbackOptions(true);
40
+ if ($item->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED) {
41
+ $qtyInventory = $item->getProductQty();
42
+ } else {
43
+ $qtyInventory = $item->getQtyInventory();
44
+ }
45
+ if (isset($qtyInventory)) {
46
+ $inventory[] = '<li>' . round($qtyInventory) . '</li>';
47
+ }
48
+ }
49
+
50
+ if (count($inventory)) {
51
+ $value = '<ul><li>&nbsp;</li>' . implode($inventory) . '</ul>';
52
+ }
53
+ } else {
54
+ $item = Mage::getModel('diglin_ricento/products_listing_item')->load($row->getItemId());
55
+ $item->setLoadFallbackOptions(true);
56
+ if ($item->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED) {
57
+ $value = $item->getProductQty();
58
+ } else {
59
+ $value = $item->getQtyInventory();
60
+ }
61
+ $value = round($value, 0);
62
+ }
63
+
64
+ return $value;
65
+ }
66
+
67
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Name.php RENAMED
@@ -5,16 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Name
14
  *
15
  * Renderer for column name for configurable product
16
  */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Name
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
@@ -24,7 +24,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Rendere
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
- if ($row->getTypeId() == Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Name
14
  *
15
  * Renderer for column name for configurable product
16
  */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Name
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
+ if ($row->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Renderer/Price.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Price
14
+ */
15
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Price
16
+ extends Diglin_Ricento_Block_Adminhtml_Dashboard_Renderer_Price {}
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/{Tabs/Products/Renderer → Renderer}/Status.php RENAMED
@@ -5,16 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Status
14
  *
15
  * Renderer for column name for configurable product
16
  */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Status
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
@@ -24,7 +24,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Rendere
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
- if ($row->getTypeId() == Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
  $helper = Mage::helper('diglin_ricento');
@@ -33,8 +33,11 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Rendere
33
  foreach ($itemCollection->getItems() as $item) {
34
  $output = '';
35
  switch ($item->getStatus()) {
 
 
 
36
  case 'error':
37
- $output .= '<span class="message_errors">' . $helper->__('Stopped') . '</span>';
38
  break;
39
  case 'listed':
40
  $output .= '<span class="message_success">' . $helper->__('Listed') . '</span>';
@@ -58,12 +61,20 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Rendere
58
  return $value;
59
  }
60
 
 
 
 
 
 
61
  protected function _decorate($value, Varien_Object $row)
62
  {
63
  $output = '';
64
  $helper = Mage::helper('diglin_ricento');
65
  $value = htmlspecialchars_decode($value);
66
  switch ($row->getStatus()) {
 
 
 
67
  case 'error':
68
  $output .= '<div id="message-errors-' . $row->getId() . '" class="message_errors">' . $helper->__('Error') . '</div>';
69
  break;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  /**
13
+ * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Status
14
  *
15
  * Renderer for column name for configurable product
16
  */
17
+ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Renderer_Status
18
  extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
  {
20
  /**
24
  public function render(Varien_Object $row)
25
  {
26
  $value = $this->_getValue($row);
27
+ if ($row->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
28
  $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
  $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
  $helper = Mage::helper('diglin_ricento');
33
  foreach ($itemCollection->getItems() as $item) {
34
  $output = '';
35
  switch ($item->getStatus()) {
36
+ case 'stopped':
37
+ $output .= '<span class="message_warnings">' . $helper->__('Stopped') . '</span>';
38
+ break;
39
  case 'error':
40
+ $output .= '<span class="message_errors">' . $helper->__('Error') . '</span>';
41
  break;
42
  case 'listed':
43
  $output .= '<span class="message_success">' . $helper->__('Listed') . '</span>';
61
  return $value;
62
  }
63
 
64
+ /**
65
+ * @param $value
66
+ * @param Varien_Object $row
67
+ * @return string
68
+ */
69
  protected function _decorate($value, Varien_Object $row)
70
  {
71
  $output = '';
72
  $helper = Mage::helper('diglin_ricento');
73
  $value = htmlspecialchars_decode($value);
74
  switch ($row->getStatus()) {
75
+ case 'stopped':
76
+ $output .= '<div id="message-warnings-' . $row->getId() . '" class="message_warnings">' . $helper->__('Stopped') . '</div>';
77
+ break;
78
  case 'error':
79
  $output .= '<div id="message-errors-' . $row->getId() . '" class="message_errors">' . $helper->__('Error') . '</div>';
80
  break;
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/General.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -65,7 +65,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_General
65
  foreach ($languages as $lang) {
66
  $title = Mage::helper('catalog')->__('Store View for %s', ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language')));
67
  $fieldsetLang->addField('lang_store_id_'. $lang, 'select', array(
68
- 'name' => 'product_listing[lang_store_id_]' . $lang,
69
  'label' => $title,
70
  'title' => $title,
71
  'class' => 'lang_store_id',
@@ -158,4 +158,4 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_General
158
  {
159
  return Mage::registry('products_listing');
160
  }
161
- }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
65
  foreach ($languages as $lang) {
66
  $title = Mage::helper('catalog')->__('Store View for %s', ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language')));
67
  $fieldsetLang->addField('lang_store_id_'. $lang, 'select', array(
68
+ 'name' => 'product_listing[lang_store_id_' . $lang . ']',
69
  'label' => $title,
70
  'title' => $title,
71
  'class' => 'lang_store_id',
158
  {
159
  return Mage::registry('products_listing');
160
  }
161
+ }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -139,17 +139,18 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
139
  'header' => Mage::helper('catalog')->__('Name'),
140
  'index' => 'name',
141
  'width' => '300',
142
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_name')
143
  ));
144
 
145
  $store = Mage::app()->getWebsite($this->getListing()->getWebsiteId())->getDefaultStore();
146
  $this->addColumn('price', array(
147
  'header' => Mage::helper('diglin_ricento')->__('Price Catalog'),
148
  'type' => 'price',
149
- 'currency_code' => $store->getBaseCurrency()->getCode(),
150
  'index' => 'price',
151
  'sortable' => false,
152
  'filter' => false,
 
153
  ));
154
  $this->addColumn('type', array(
155
  'header' => Mage::helper('catalog')->__('Type'),
@@ -169,7 +170,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
169
  'width' => '120',
170
  'index' => 'ricardo_article_id',
171
  'type' => 'number',
172
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_article')
173
  ));
174
 
175
  $this->addColumn('qty', array(
@@ -179,7 +180,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
179
  'index' => 'stock_qty',
180
  'sortable' => false,
181
  'filter' => false,
182
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_inventory')
183
  ));
184
  $this->addColumn('status', array(
185
  'header' => Mage::helper('catalog')->__('Status'),
@@ -188,7 +189,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
188
  'type' => 'options',
189
  'sortable' => true,
190
  'options' => Mage::getSingleton('diglin_ricento/config_source_status')->toOptionHash(),
191
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_status')
192
  ));
193
  $this->addColumn('has_custom_options', array(
194
  'header' => '',
@@ -196,7 +197,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
196
  'index' => 'has_custom_options',
197
  'sortable' => false,
198
  'filter' => false,
199
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_customoptions')
200
  ));
201
  $this->addColumn('is_configured', array(
202
  'header' => '',
@@ -204,7 +205,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products
204
  'index' => 'is_configured',
205
  'sortable' => false,
206
  'filter' => false,
207
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_configured')
208
  ));
209
  $this->addColumn('action',
210
  array(
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
139
  'header' => Mage::helper('catalog')->__('Name'),
140
  'index' => 'name',
141
  'width' => '300',
142
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_name')
143
  ));
144
 
145
  $store = Mage::app()->getWebsite($this->getListing()->getWebsiteId())->getDefaultStore();
146
  $this->addColumn('price', array(
147
  'header' => Mage::helper('diglin_ricento')->__('Price Catalog'),
148
  'type' => 'price',
149
+ // 'currency_code' => $store->getBaseCurrency()->getCode(),
150
  'index' => 'price',
151
  'sortable' => false,
152
  'filter' => false,
153
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_price')
154
  ));
155
  $this->addColumn('type', array(
156
  'header' => Mage::helper('catalog')->__('Type'),
170
  'width' => '120',
171
  'index' => 'ricardo_article_id',
172
  'type' => 'number',
173
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_article')
174
  ));
175
 
176
  $this->addColumn('qty', array(
180
  'index' => 'stock_qty',
181
  'sortable' => false,
182
  'filter' => false,
183
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_inventory')
184
  ));
185
  $this->addColumn('status', array(
186
  'header' => Mage::helper('catalog')->__('Status'),
189
  'type' => 'options',
190
  'sortable' => true,
191
  'options' => Mage::getSingleton('diglin_ricento/config_source_status')->toOptionHash(),
192
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_status')
193
  ));
194
  $this->addColumn('has_custom_options', array(
195
  'header' => '',
197
  'index' => 'has_custom_options',
198
  'sortable' => false,
199
  'filter' => false,
200
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_customoptions')
201
  ));
202
  $this->addColumn('is_configured', array(
203
  'header' => '',
205
  'index' => 'is_configured',
206
  'sortable' => false,
207
  'filter' => false,
208
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_configured')
209
  ));
210
  $this->addColumn('action',
211
  array(
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Add.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -51,12 +51,16 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Add
51
  if ($this->getListing()->getId()) {
52
  $this->setDefaultFilter(array('in_category'=>1));
53
  }
 
 
 
54
  /* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
55
  $collection = Mage::getResourceModel('catalog/product_collection')
56
  ->addAttributeToSelect('name')
57
  ->addAttributeToSelect('sku')
58
  ->addAttributeToSelect('type_id')
59
  ->addWebsiteFilter($this->getListing()->getWebsiteId())
 
60
  ->addAttributeToFilter('type_id', array('in' => $this->_helper->getAllowedProductTypes()))
61
  ->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
62
  //->addFieldToFilter('visibility', array('neq' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE ))
@@ -118,7 +122,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Add
118
  'index' => 'has_custom_options',
119
  'sortable' => false,
120
  'filter' => false,
121
- 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_tabs_products_renderer_customoptions')
122
  ));
123
  $this->addColumn('sku', array(
124
  'header' => Mage::helper('catalog')->__('SKU'),
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
51
  if ($this->getListing()->getId()) {
52
  $this->setDefaultFilter(array('in_category'=>1));
53
  }
54
+
55
+ $store = Mage::app()->getWebsite($this->getListing()->getWebsiteId())->getDefaultStore();
56
+
57
  /* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
58
  $collection = Mage::getResourceModel('catalog/product_collection')
59
  ->addAttributeToSelect('name')
60
  ->addAttributeToSelect('sku')
61
  ->addAttributeToSelect('type_id')
62
  ->addWebsiteFilter($this->getListing()->getWebsiteId())
63
+ ->setStoreId($store->getId())
64
  ->addAttributeToFilter('type_id', array('in' => $this->_helper->getAllowedProductTypes()))
65
  ->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
66
  //->addFieldToFilter('visibility', array('neq' => Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE ))
122
  'index' => 'has_custom_options',
123
  'sortable' => false,
124
  'filter' => false,
125
+ 'renderer' => Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_products_listing_edit_renderer_customoptions')
126
  ));
127
  $this->addColumn('sku', array(
128
  'header' => Mage::helper('catalog')->__('SKU'),
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Massaction.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
 
11
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Massaction extends Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
 
11
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Massaction extends Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Products/Renderer/Inventory.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
- /**
3
- * ricardo.ch AG - Switzerland
4
- *
5
- * @author Sylvain Rayé <support at diglin.com>
6
- * @category Diglin
7
- * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
- */
11
-
12
- /**
13
- * Class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Inventory
14
- *
15
- * Renderer for column name for configurable product
16
- */
17
- class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Products_Renderer_Inventory
18
- extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
- {
20
- /**
21
- * @param Varien_Object $row
22
- * @return string
23
- */
24
- public function render(Varien_Object $row)
25
- {
26
- $value = $this->_getValue($row);
27
- if ($row->getTypeId() == Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
28
- $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
29
- $itemCollection->addFieldToFilter('parent_item_id', $row->getItemId());
30
-
31
- $inventory = array();
32
- foreach ($itemCollection->getItems() as $item) {
33
- $qtyInventory = $item->getQtyInventory();
34
- if (isset($qtyInventory)) {
35
- $inventory[] = '<li>' . $qtyInventory . '</li>';
36
- }
37
- }
38
-
39
- if (count($inventory)) {
40
- $value = '<ul><li>&nbsp;</li>' . implode($inventory) . '</ul>';
41
- }
42
- }
43
-
44
- return $value;
45
- }
46
-
47
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Rules.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Edit/Tabs/Selloptions.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -30,12 +30,23 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
30
  'name' => 'sales_options[entity_id]',
31
  ));
32
 
33
- $storeCurrency = Mage::getStoreConfig('currency/options/base', Mage::app()->getWebsite($this->_getListing()->getWebsiteId())->getDefaultStore());
34
  $currencyWarning = '';
35
  if ($storeCurrency !== Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
36
- $currencyWarning = '<ul class="messages"><li class="warning-msg">' .
37
- $this->__("The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed.", Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) .
38
- '</li></ul>';
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  /**
@@ -88,7 +99,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
88
  $fieldsetTypeAuction->addField('sales_auction_increment', 'text', array(
89
  'name' => 'sales_options[sales_auction_increment]',
90
  'label' => $this->__('Increment'),
91
- 'class' => 'validate-number required-if-visible validate-startprice-increment',
92
  ));
93
  $fieldsetTypeAuction->addField('auction_currency', 'label', array(
94
  'name' => 'sales_options[auction_currency]',
@@ -125,7 +136,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
125
  'after_element_html' => ' &nbsp;',
126
  'no_span' => true,
127
  'values' => Mage::getSingleton('diglin_ricento/config_source_sales_price_method')->getAllOptions(),
128
- 'class' => 'required-if-visible',
129
  ));
130
  $fieldsetPriceChange->addField('price_change', 'text', array(
131
  'name' => 'sales_options[price_change]',
@@ -154,9 +165,9 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
154
 
155
  $fieldsetSchedule = $form->addFieldset('fieldset_schedule', array('legend' => $this->__('Schedule')));
156
  $fieldsetSchedule->addType('radios_extensible', Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_form_element_radios_extensible'));
157
- $dateFormatIso = Mage::app()->getLocale()->getDateTimeFormat(
158
- Mage_Core_Model_Locale::FORMAT_TYPE_SHORT
159
- );
160
  $fieldsetSchedule->addField('schedule_date_start_immediately', 'radios_extensible', array(
161
  'name' => 'sales_options[schedule_date_start_immediately]',
162
  'label' => $this->__('Start'),
@@ -168,7 +179,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
168
  'time' => true,
169
  'name' => 'sales_options[schedule_date_start]',
170
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
171
- 'format' => $dateFormatIso,
172
  //'class' => 'validate-date validate-date-range date-range-end_date-from' // Prototype's date validation does not work with localized dates, so we don't use it
173
  )
174
  ))
@@ -269,7 +280,8 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
269
 
270
  $fieldsetStock = $form->addFieldset('fieldset_stock', array('legend' => $this->__('Stock Management')));
271
  $fieldsetStock->addType('radios_extensible', Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_form_element_radios_extensible'));
272
- $fieldsetStock->addField('stock_management_use_inventory', 'radios_extensible', array(
 
273
  'name' => 'sales_options[stock_management_use_inventory]',
274
  'label' => $this->__('Stock Management'),
275
  'note' => $this->__('Range 1...999. If you use the product inventory option, the amount of items will be taken from the field "Qty" defined in the product inventory and limited to 999 if you have a quantity above this value.'),
@@ -284,6 +296,18 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
284
  )
285
  ));
286
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  /**
288
  * Template fieldset
289
  */
@@ -305,14 +329,14 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
305
  $fieldsetPromotion->addField('promotion_space', 'radios_extensible', array(
306
  'name' => 'sales_options[promotion_space]',
307
  'label' => $this->__('Privilege Space'),
308
- 'note' => $this->__("Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>", Diglin_Ricento_Helper_Data::RICARDO_URL_HELP_PROMOTION),
309
  'values' => Mage::getSingleton('diglin_ricento/config_source_sales_promotion')->getAllOptions()
310
  ));
311
 
312
  $fieldsetPromotion->addField('promotion_start_page', 'checkbox', array(
313
  'name' => 'sales_options[promotion_start_page]',
314
  'label' => $this->__('Home Privilege Space'),
315
- 'note' => $this->__("Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>", Diglin_Ricento_Helper_Data::RICARDO_URL_HELP_PROMOTION),
316
  'after_element_html' => $this->__('Home Space') . ' - ' . $this->_getPromotionHomeFee()
317
  ));
318
 
@@ -383,18 +407,27 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
383
  $derivedValues['stock_management_use_inventory'] = 1;
384
  }
385
 
 
 
 
 
 
 
 
386
  /**
387
  * Set the default values of the radio button for the "Starting Date"
388
  */
389
  if ($this->getSalesOptions()->getScheduleDateStart() == null) {
390
  $derivedValues['schedule_date_start_immediately'] = 1;
 
 
391
  }
392
 
393
  /**
394
  * Set the default values for the ending date
395
  */
396
  if (!in_array($this->getSalesOptions()->getSchedulePeriodDays(), $this->_getDaysOptions()->toOptionHash())) {
397
- $derivedValues['schedule_period_use_end_date'] = 1;
398
  $derivedValues['schedule_period_end_date'] = date_add(
399
  new DateTime($this->getSalesOptions()->getScheduleDateStart()),
400
  DateInterval::createFromDateString($this->getSalesOptions()->getSchedulePeriodDays() . ' day')
@@ -422,6 +455,13 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
422
  $this->getForm()->getElement('promotion_start_page')->setChecked(true);
423
  }
424
 
 
 
 
 
 
 
 
425
 
426
  $this->getForm()->addValues($derivedValues);
427
  return parent::_initFormValues();
@@ -526,6 +566,6 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Edit_Tabs_Selloptions
526
  }
527
  }
528
 
529
- return $priceHelper->formatPrice($price, $this->_getListing()->getWebsiteId());
530
  }
531
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
30
  'name' => 'sales_options[entity_id]',
31
  ));
32
 
33
+ $storeCurrency = Mage::app()->getWebsite($this->_getListing()->getWebsiteId())->getDefaultStore()->getBaseCurrencyCode();
34
  $currencyWarning = '';
35
  if ($storeCurrency !== Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
36
+ $currencyWarning = '<ul class="messages">';
37
+
38
+ $rate = Mage::helper('diglin_ricento/price')->getCurrency($storeCurrency)->getRate(Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
39
+ if (empty($rate)) {
40
+ $currencyWarning .= '<li class="error-msg">' . $this->__('Currency Rate not configured') . '</li>';
41
+ }
42
+
43
+ $currencyWarning .= '<li class="warning-msg">'
44
+ . $this->__('The store\'s base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation.',
45
+ Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY,
46
+ $storeCurrency)
47
+ . '</li>';
48
+
49
+ $currencyWarning .= '</ul>';
50
  }
51
 
52
  /**
99
  $fieldsetTypeAuction->addField('sales_auction_increment', 'text', array(
100
  'name' => 'sales_options[sales_auction_increment]',
101
  'label' => $this->__('Increment'),
102
+ 'class' => 'validate-number required-if-visible validate-startprice-increment'
103
  ));
104
  $fieldsetTypeAuction->addField('auction_currency', 'label', array(
105
  'name' => 'sales_options[auction_currency]',
136
  'after_element_html' => ' &nbsp;',
137
  'no_span' => true,
138
  'values' => Mage::getSingleton('diglin_ricento/config_source_sales_price_method')->getAllOptions(),
139
+ 'class' => 'required-if-visible product-listing-select',
140
  ));
141
  $fieldsetPriceChange->addField('price_change', 'text', array(
142
  'name' => 'sales_options[price_change]',
165
 
166
  $fieldsetSchedule = $form->addFieldset('fieldset_schedule', array('legend' => $this->__('Schedule')));
167
  $fieldsetSchedule->addType('radios_extensible', Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_form_element_radios_extensible'));
168
+
169
+ $dateFormatIso = Mage::app()->getLocale()->getDateTimeFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
170
+
171
  $fieldsetSchedule->addField('schedule_date_start_immediately', 'radios_extensible', array(
172
  'name' => 'sales_options[schedule_date_start_immediately]',
173
  'label' => $this->__('Start'),
179
  'time' => true,
180
  'name' => 'sales_options[schedule_date_start]',
181
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
182
+ 'format' => $dateFormatIso
183
  //'class' => 'validate-date validate-date-range date-range-end_date-from' // Prototype's date validation does not work with localized dates, so we don't use it
184
  )
185
  ))
280
 
281
  $fieldsetStock = $form->addFieldset('fieldset_stock', array('legend' => $this->__('Stock Management')));
282
  $fieldsetStock->addType('radios_extensible', Mage::getConfig()->getBlockClassName('diglin_ricento/adminhtml_form_element_radios_extensible'));
283
+
284
+ $stockManagementUseInventory = $fieldsetStock->addField('stock_management_use_inventory', 'radios_extensible', array(
285
  'name' => 'sales_options[stock_management_use_inventory]',
286
  'label' => $this->__('Stock Management'),
287
  'note' => $this->__('Range 1...999. If you use the product inventory option, the amount of items will be taken from the field "Qty" defined in the product inventory and limited to 999 if you have a quantity above this value.'),
296
  )
297
  ));
298
 
299
+ $stockManagement = $stockManagementUseInventory->getElements()->searchById('stock_management');
300
+ $stockManagement->addField('stock_management_qty_type', 'select', array(
301
+ 'name' => 'sales_options[stock_management_qty_type]',
302
+ 'after_element_html' => ' &nbsp;',
303
+ 'no_span' => true,
304
+ 'class' => 'product-listing-select',
305
+ 'values' => array(
306
+ array('label' => $this->__('Fix'), 'value' => Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_FIX),
307
+ array('label' => $this->__('Percent'), 'value' => Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_PERCENT)
308
+ ),
309
+ ));
310
+
311
  /**
312
  * Template fieldset
313
  */
329
  $fieldsetPromotion->addField('promotion_space', 'radios_extensible', array(
330
  'name' => 'sales_options[promotion_space]',
331
  'label' => $this->__('Privilege Space'),
332
+ 'note' => $this->__("Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>", Mage::helper('diglin_ricento')->getHelpPromotion()),
333
  'values' => Mage::getSingleton('diglin_ricento/config_source_sales_promotion')->getAllOptions()
334
  ));
335
 
336
  $fieldsetPromotion->addField('promotion_start_page', 'checkbox', array(
337
  'name' => 'sales_options[promotion_start_page]',
338
  'label' => $this->__('Home Privilege Space'),
339
+ 'note' => $this->__("Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>", Mage::helper('diglin_ricento')->getHelpPromotion()),
340
  'after_element_html' => $this->__('Home Space') . ' - ' . $this->_getPromotionHomeFee()
341
  ));
342
 
407
  $derivedValues['stock_management_use_inventory'] = 1;
408
  }
409
 
410
+ /**
411
+ * Set the default values of the radio button for the "stock management quantity type"
412
+ */
413
+ if ($this->getSalesOptions()->getStockManagementQtyType()) {
414
+ $derivedValues['stock_management_qty_type'] = $this->getSalesOptions()->getStockManagementQtyType();
415
+ }
416
+
417
  /**
418
  * Set the default values of the radio button for the "Starting Date"
419
  */
420
  if ($this->getSalesOptions()->getScheduleDateStart() == null) {
421
  $derivedValues['schedule_date_start_immediately'] = 1;
422
+ } else {
423
+ $derivedValues['schedule_date_start'] = Mage::app()->getLocale()->date($this->getSalesOptions()->getScheduleDateStart());
424
  }
425
 
426
  /**
427
  * Set the default values for the ending date
428
  */
429
  if (!in_array($this->getSalesOptions()->getSchedulePeriodDays(), $this->_getDaysOptions()->toOptionHash())) {
430
+ $derivedValues['schedule_period_use_end_date'] = 0;
431
  $derivedValues['schedule_period_end_date'] = date_add(
432
  new DateTime($this->getSalesOptions()->getScheduleDateStart()),
433
  DateInterval::createFromDateString($this->getSalesOptions()->getSchedulePeriodDays() . ' day')
455
  $this->getForm()->getElement('promotion_start_page')->setChecked(true);
456
  }
457
 
458
+ /* @var $stockManagement Varien_Data_Form_Element_Select */
459
+ $stockManagement = $this->getForm()->getElement('stock_management');
460
+ $stockManagement->setAfterElementHtml($stockManagement->getElements()->searchById('stock_management_qty_type')->getElementHtml());
461
+
462
+ if ($this->getSalesOptions()->getSalesAuctionIncrement() <= 0) {
463
+ $derivedValues['sales_auction_increment'] = 1;
464
+ }
465
 
466
  $this->getForm()->addValues($derivedValues);
467
  return parent::_initFormValues();
566
  }
567
  }
568
 
569
+ return implode(' / ', $priceHelper->formatDoubleCurrency($price, $this->_getListing()->getWebsiteId(), Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY));
570
  }
571
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Form/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -90,7 +90,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Grid extends Mage_Adminhtm
90
  $this->addColumn('status', array(
91
  'header' => $this->__('Status') ,
92
  'align' => 'left',
93
- 'width' => '150px',
94
  'index' => 'status',
95
  'type' => 'options',
96
  'options' => Mage::getSingleton('diglin_ricento/config_source_status')->toOptionHash(),
@@ -186,7 +186,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Grid extends Mage_Adminhtm
186
  $this->getMassactionBlock()->addItem('delete', array(
187
  'label'=> $this->__('Delete'),
188
  'url' => $this->getUrl('*/*/massDelete', array('_current'=>true)),
189
- 'confirm' => $this->__('Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is "Listed"')
190
  ));
191
 
192
  return $this;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
90
  $this->addColumn('status', array(
91
  'header' => $this->__('Status') ,
92
  'align' => 'left',
93
+ 'width' => '200px',
94
  'index' => 'status',
95
  'type' => 'options',
96
  'options' => Mage::getSingleton('diglin_ricento/config_source_status')->toOptionHash(),
186
  $this->getMassactionBlock()->addItem('delete', array(
187
  'label'=> $this->__('Delete'),
188
  'url' => $this->getUrl('*/*/massDelete', array('_current'=>true)),
189
+ 'confirm' => $this->__('Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is "Listed"')
190
  ));
191
 
192
  return $this;
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid/Renderer/Status.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -29,25 +29,23 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Grid_Renderer_Status
29
  $sqlListed = $readAdapter->select()
30
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
31
  ->where('products_listing_id = ?', $row->getId())
32
- ->where('status = ?', Diglin_Ricento_Helper_Data::STATUS_LISTED)
33
- ->where('parent_item_id IS NULL');
34
 
35
  $sqlNotListed = $readAdapter->select()
36
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
37
  ->where('products_listing_id = ?', $row->getId())
38
- ->where('status != ?', Diglin_Ricento_Helper_Data::STATUS_LISTED)
39
- ->where('parent_item_id IS NULL');
40
-
41
 
42
  $totalListed = $readAdapter->fetchOne($sqlListed);
43
  $totalUnlisted = $readAdapter->fetchOne($sqlNotListed);
44
 
45
  $html = '';
46
- $html .= '<strong>' . $this->_getValue($row) . '</strong>';
47
  $html .= '<dl class="diglin_ricento_status_info">';
48
- $html .= '<dt>' . $this->__('Listed products:') . '</dt>';
49
  $html .= '<dd>' . (int) $totalListed . '</dd>';
50
- $html .= '<dt>' . $this->__('Not listed products:') . '</dt>';
51
  $html .= '<dd>' . (int) $totalUnlisted . '</dd>';
52
  $html .= '</dl>';
53
  return $html;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
29
  $sqlListed = $readAdapter->select()
30
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
31
  ->where('products_listing_id = ?', $row->getId())
32
+ ->where('status = ?', Diglin_Ricento_Helper_Data::STATUS_LISTED);
 
33
 
34
  $sqlNotListed = $readAdapter->select()
35
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
36
  ->where('products_listing_id = ?', $row->getId())
37
+ ->where('status <> ? ', Diglin_Ricento_Helper_Data::STATUS_LISTED)
38
+ ->where('type <> ?', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE);
 
39
 
40
  $totalListed = $readAdapter->fetchOne($sqlListed);
41
  $totalUnlisted = $readAdapter->fetchOne($sqlNotListed);
42
 
43
  $html = '';
44
+ $html .= '<strong>' . $this->__(ucwords($this->_getValue($row))) . '</strong>';
45
  $html .= '<dl class="diglin_ricento_status_info">';
46
+ $html .= '<dt>' . $this->__('Listed products:') . '&nbsp;</dt>';
47
  $html .= '<dd>' . (int) $totalListed . '</dd>';
48
+ $html .= '<dt>' . $this->__('Not listed products:') . '&nbsp;</dt>';
49
  $html .= '<dd>' . (int) $totalUnlisted . '</dd>';
50
  $html .= '</dl>';
51
  return $html;
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Grid/Renderer/Total.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -29,7 +29,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Grid_Renderer_Total
29
  $total = $readAdapter->select()
30
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
31
  ->where('products_listing_id = ?', $row->getId())
32
- ->where('parent_item_id IS NULL');
33
 
34
  return $readAdapter->fetchOne($total);
35
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
29
  $total = $readAdapter->select()
30
  ->from($resourceModel->getTable('diglin_ricento/products_listing_item'), new Zend_Db_Expr('COUNT(*)'))
31
  ->where('products_listing_id = ?', $row->getId())
32
+ ->where('type <> ?', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE);
33
 
34
  return $readAdapter->fetchOne($total);
35
  }
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Form.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs/Rules.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Edit/Tabs/Selloptions.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Item/Preview.php CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Item_Preview extends Mage_Adminhtml_Block_Template
@@ -298,7 +298,7 @@ class Diglin_Ricento_Block_Adminhtml_Products_Listing_Item_Preview extends Mage_
298
  */
299
  public function getProductPrice()
300
  {
301
- return $this->_getPrice($this->getProductItem()->getProductPrice());
302
  }
303
 
304
  /**
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Item_Preview extends Mage_Adminhtml_Block_Template
298
  */
299
  public function getProductPrice()
300
  {
301
+ return $this->_getPrice($this->getProductItem()->getProductPrice(false));
302
  }
303
 
304
  /**
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/Log.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Log extends Mage_Adminhtml_Block_Widget_Grid_Container
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Block_Adminhtml_Products_Listing_Log extends Mage_Adminhtml_Block_Widget_Grid_Container
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/New.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Products/Listing/New/Form.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
- /*
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
1
  <?php
2
+ /**
3
  * ricardo.ch AG - Switzerland
4
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Block/Payment/Info.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Controller/.DS_Store CHANGED
Binary file
app/code/community/Diglin/Ricento/Controller/Adminhtml/Action.php CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  abstract class Diglin_Ricento_Controller_Adminhtml_Action extends Mage_Adminhtml_Controller_Action
@@ -51,13 +51,13 @@ abstract class Diglin_Ricento_Controller_Adminhtml_Action extends Mage_Adminhtml
51
  return Mage::registry('products_listing');
52
  }
53
 
54
- protected function isApiReady()
55
  {
56
  $helper = Mage::helper('diglin_ricento');
57
  $helperApi = Mage::helper('diglin_ricento/api');
58
  $websiteId = $this->_initListing()->getWebsiteId();
59
 
60
- return $helper->isEnabled($websiteId) && $helper->isConfigured($websiteId) && !$helperApi->isApiTokenCredentialGoingToExpire($websiteId);
61
  }
62
 
63
  /**
@@ -67,4 +67,123 @@ abstract class Diglin_Ricento_Controller_Adminhtml_Action extends Mage_Adminhtml
67
  {
68
  return true;
69
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  abstract class Diglin_Ricento_Controller_Adminhtml_Action extends Mage_Adminhtml_Controller_Action
51
  return Mage::registry('products_listing');
52
  }
53
 
54
+ protected function _isApiReady()
55
  {
56
  $helper = Mage::helper('diglin_ricento');
57
  $helperApi = Mage::helper('diglin_ricento/api');
58
  $websiteId = $this->_initListing()->getWebsiteId();
59
 
60
+ return $helper->isEnabled($websiteId) && $helper->isConfigured($websiteId) && !$helperApi->apiTokenCredentialGoingToExpire($websiteId);
61
  }
62
 
63
  /**
67
  {
68
  return true;
69
  }
70
+
71
+ /**
72
+ * Create products listing items children for configurable product
73
+ *
74
+ * @return $this
75
+ */
76
+ protected function _prepareConfigurableProduct()
77
+ {
78
+ $productListingId = $this->_initListing()->getId();
79
+ $statuses = array(Diglin_Ricento_Helper_Data::STATUS_LISTED, Diglin_Ricento_Helper_Data::STATUS_SOLD);
80
+
81
+ /**
82
+ * Delete not listed children products of configurable product
83
+ */
84
+ $collectionListingItemChildren = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
85
+ $collectionListingItemChildren
86
+ ->addFieldToFilter('parent_product_id', array('notnull' => 1))
87
+ ->addFieldToFilter('status', array('nin' => $statuses))
88
+ ->addFieldToFilter('products_listing_id', $productListingId);
89
+
90
+ $collectionListingItemChildren->walk('delete');
91
+
92
+ /**
93
+ * Get listed children products of configurable product
94
+ */
95
+ $collectionListingItemChildren = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
96
+ $collectionListingItemChildren
97
+ ->addFieldToFilter('parent_product_id', array('notnull' => 1))
98
+ ->addFieldToFilter('status', array('in' => $statuses))
99
+ ->addFieldToFilter('products_listing_id', $productListingId);
100
+
101
+ $listedChildrenIds = $collectionListingItemChildren->getColumnValues('product_id');
102
+
103
+ /**
104
+ * Get the list of configurable products
105
+ */
106
+ $collectionListingItem = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
107
+ $collectionListingItem
108
+ ->addFieldToFilter('type', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
109
+ ->addFieldToFilter('status', array('nin' => $statuses))
110
+ ->addFieldToFilter('products_listing_id', $productListingId);
111
+
112
+ /**
113
+ * Get all products of configurable products for a list
114
+ *
115
+ * @var $item Diglin_Ricento_Model_Products_Listing_Item
116
+ */
117
+ foreach ($collectionListingItem->getItems() as $item) {
118
+ /**
119
+ * Get all children products
120
+ */
121
+ $collection = Mage::getResourceModel('catalog/product_collection')
122
+ ->addAttributeToSelect('sku')
123
+ ->addFilterByRequiredOptions()
124
+ ->addFieldToFilter('entity_id', array('in' => $item->getProduct()->getUsedProductIds(), 'nin' => array('nin' => $listedChildrenIds)));
125
+
126
+ $attributes = $item->getProduct()->getConfigurableAttributes();
127
+
128
+ foreach ($attributes as $attribute) {
129
+ $collection->addAttributeToSelect($attribute->getProductAttribute()->getAttributeCode());
130
+ $collection->addAttributeToFilter($attribute->getProductAttribute()->getAttributeCode(), array('notnull' => 1));
131
+ }
132
+
133
+ foreach ($collection->getItems() as $childProduct) {
134
+
135
+ $configurableChild = array();
136
+
137
+ foreach ($attributes as $attribute) {
138
+
139
+ $productAttribute = $attribute->getProductAttribute();
140
+ $attributeValueId = $childProduct->getData($productAttribute->getAttributeCode());
141
+ if ($attributeValueId) {
142
+
143
+ $priceVariation = array();
144
+ $subtitle = $productAttribute->getFrontendLabel() . ': ';
145
+
146
+ /**
147
+ * Get price variation
148
+ */
149
+ $prices = $attribute->getData('prices');
150
+ foreach ($prices as $price) {
151
+ if ($price['pricing_value'] != 0 && $price['value_index'] == $attributeValueId) {
152
+ $priceVariation = array('pricing_value' => $price['pricing_value'], 'is_percent' => $price['is_percent']);
153
+ break;
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Get attribute label to be used as subtitle
159
+ */
160
+ foreach ($productAttribute->getSource()->getAllOptions() as $option) {
161
+ if ($attributeValueId == $option['value']) {
162
+ $subtitle .= $option['label'];
163
+ }
164
+ }
165
+
166
+ $configurableChild['options'][$attributeValueId] = array_merge(array('subtitle' => $subtitle), $priceVariation);
167
+ }
168
+ }
169
+
170
+ /**
171
+ * Save as new products listing item
172
+ */
173
+ $itemChild = clone $item;
174
+ $itemChild
175
+ ->setId(null)
176
+ ->setCreatedAt(Mage::getSingleton('core/date')->gmtDate())
177
+ ->setUpdatedAt(null)
178
+ ->setProductId($childProduct->getId())
179
+ ->setAdditionalData(Mage::helper('core')->jsonEncode($configurableChild))
180
+ ->setParentItemId($item->getId())
181
+ ->setParentProductId($item->getProductId())
182
+ ->setType(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
183
+ ->save();
184
+ }
185
+ }
186
+
187
+ return $this;
188
+ }
189
  }
app/code/community/Diglin/Ricento/Controller/Adminhtml/Products/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -70,14 +70,13 @@ abstract class Diglin_Ricento_Controller_Adminhtml_Products_Listing extends Digl
70
  if (!empty($data['sales_options']['sales_auction_direct_buy'])
71
  && $data['sales_options']['sales_type'] == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
72
  $data['sales_options']['stock_management'] = 1;
 
73
  $this->_getSession()->addNotice($this->__('Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold'));
74
  }
75
  if (!empty($data['sales_options']['schedule_date_start_immediately'])) {
76
  $data['sales_options']['schedule_date_start'] = null;
77
- if ($data['sales_options']['sales_type'] == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
78
- $dateStart = new DateTime();
79
- $derivedValues['schedule_date_start'] = $dateStart->format(Varien_Date::DATETIME_PHP_FORMAT);
80
- }
81
  }
82
  if (!empty($data['sales_options']['schedule_period_use_end_date'])) {
83
  try {
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
70
  if (!empty($data['sales_options']['sales_auction_direct_buy'])
71
  && $data['sales_options']['sales_type'] == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
72
  $data['sales_options']['stock_management'] = 1;
73
+ $data['sales_options']['stock_management_qty_type'] = Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_FIX;
74
  $this->_getSession()->addNotice($this->__('Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold'));
75
  }
76
  if (!empty($data['sales_options']['schedule_date_start_immediately'])) {
77
  $data['sales_options']['schedule_date_start'] = null;
78
+ } else {
79
+ $data['sales_options']['schedule_date_start'] = Mage::app()->getLocale()->utcDate(null, $data['sales_options']['schedule_date_start'], true)->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
 
 
80
  }
81
  if (!empty($data['sales_options']['schedule_period_use_end_date'])) {
82
  try {
app/code/community/Diglin/Ricento/Exception.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Helper/Api.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -37,30 +37,76 @@ class Diglin_Ricento_Helper_Api extends Mage_Core_Helper_Abstract
37
  * @param int|string|Mage_Core_Model_Website $website
38
  * @return bool
39
  */
40
- public function isApiTokenCredentialGoingToExpire($website = 0)
41
  {
42
- $token = Mage::getModel('diglin_ricento/api_token')
43
- ->loadByWebsiteAndTokenType(Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite($website)->getId());
44
-
45
- $expirationDate = $token->getExpirationDate();
46
  $dayDelay = Mage::helper('diglin_ricento')->getExpirationNotificationDelay();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
 
 
 
 
 
 
 
48
  if (empty($expirationDate) ||
49
- isset($expirationDate) && time() >= (Mage::getSingleton('core/date')->timestamp($expirationDate) - ($dayDelay * 24 * 3600)))
50
- {
51
  return true;
52
  }
53
 
54
  return false;
55
  }
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  /**
58
  * Get if the token credential exists
59
  *
60
  * @param int|string|Mage_Core_Model_Website $website
61
  * @return bool
62
  */
63
- public function isApiTokenCredentialExists($website = 0)
64
  {
65
  $token = Mage::getModel('diglin_ricento/api_token')
66
  ->loadByWebsiteAndTokenType(Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite($website)->getId());
@@ -75,7 +121,6 @@ class Diglin_Ricento_Helper_Api extends Mage_Core_Helper_Abstract
75
  public function calculateSessionExpirationDate($sessionDuration, $time = null)
76
  {
77
  $sessionDuration *= 60;
78
-
79
  if (is_null($time)) {
80
  return time() + $sessionDuration;
81
  }
@@ -102,8 +147,37 @@ class Diglin_Ricento_Helper_Api extends Mage_Core_Helper_Abstract
102
  public function getValidationUrl($websiteId = 0)
103
  {
104
  return Mage::getSingleton('diglin_ricento/api_services_security')
105
- //@fixme there is issue with getting credential token in multi shop so for real website support start to fix here - not planned at the moment
106
- // ->setCurrentWebsite($websiteId)
107
  ->getValidationUrl();
108
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
37
  * @param int|string|Mage_Core_Model_Website $website
38
  * @return bool
39
  */
40
+ public function apiTokenCredentialGoingToExpire($website = 0)
41
  {
 
 
 
 
42
  $dayDelay = Mage::helper('diglin_ricento')->getExpirationNotificationDelay();
43
+ $expirationDate = $this->getExpirationDate($website);
44
+
45
+ if (empty($expirationDate) ||
46
+ isset($expirationDate) && time() >= (Mage::getSingleton('core/date')->timestamp($expirationDate) - ($dayDelay * 24 * 3600))
47
+ ) {
48
+ return true;
49
+ }
50
+
51
+ return false;
52
+ }
53
+
54
+ /**
55
+ * The API token can be validated X days before expiration
56
+ *
57
+ * @param int $website
58
+ * @return bool
59
+ */
60
+ public function apiTokenCredentialValidation($website = 0)
61
+ {
62
+ $dayDelay = Mage::helper('diglin_ricento')->getExpirationNotificationValidationDelay();
63
+
64
+ $expirationDate = $this->getExpirationDate($website);
65
+ if (empty($expirationDate) ||
66
+ isset($expirationDate) && time() >= (Mage::getSingleton('core/date')->timestamp($expirationDate) - ($dayDelay * 24 * 3600))
67
+ ) {
68
+ return true;
69
+ }
70
+
71
+ return false;
72
+ }
73
 
74
+ /**
75
+ * @param int $website
76
+ * @return bool
77
+ */
78
+ public function apiExpired($website = 0)
79
+ {
80
+ $expirationDate = $this->getExpirationDate($website);
81
  if (empty($expirationDate) ||
82
+ isset($expirationDate) && time() >= (Mage::getSingleton('core/date')->timestamp($expirationDate))
83
+ ) {
84
  return true;
85
  }
86
 
87
  return false;
88
  }
89
 
90
+ /**
91
+ * @param int $website
92
+ * @return mixed
93
+ * @throws Mage_Core_Exception
94
+ */
95
+ public function getExpirationDate($website = 0)
96
+ {
97
+ $token = Mage::getModel('diglin_ricento/api_token')
98
+ ->loadByWebsiteAndTokenType(Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite($website)->getId());
99
+
100
+ return $token->getExpirationDate();
101
+ }
102
+
103
  /**
104
  * Get if the token credential exists
105
  *
106
  * @param int|string|Mage_Core_Model_Website $website
107
  * @return bool
108
  */
109
+ public function apiTokenCredentialExists($website = 0)
110
  {
111
  $token = Mage::getModel('diglin_ricento/api_token')
112
  ->loadByWebsiteAndTokenType(Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite($website)->getId());
121
  public function calculateSessionExpirationDate($sessionDuration, $time = null)
122
  {
123
  $sessionDuration *= 60;
 
124
  if (is_null($time)) {
125
  return time() + $sessionDuration;
126
  }
147
  public function getValidationUrl($websiteId = 0)
148
  {
149
  return Mage::getSingleton('diglin_ricento/api_services_security')
150
+ //@fixme there is issue with getting credential token in multi shop so for real website support start to fix here - not planned at the moment
151
+ // ->setCurrentWebsite($websiteId)
152
  ->getValidationUrl();
153
  }
154
+
155
+ /**
156
+ * @param int $website
157
+ * @return bool
158
+ * @throws Mage_Core_Exception
159
+ */
160
+ public function isMerchantNotifiedApiAuthorization($website = 0)
161
+ {
162
+ $token = Mage::getModel('diglin_ricento/api_token')
163
+ ->loadByWebsiteAndTokenType(Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite($website)->getId());
164
+
165
+ if ($token->getId() && $token->getMerchantNotified()) {
166
+ return true;
167
+ }
168
+
169
+ return false;
170
+ }
171
+
172
+ /**
173
+ * @param int $website
174
+ * @return string
175
+ */
176
+ public function getAntiforgeryToken($website = 0)
177
+ {
178
+ return Mage::getSingleton('diglin_ricento/api_services_security')
179
+ ->setCurrentWebsite($website)
180
+ ->getServiceModel()
181
+ ->getAntiforgeryToken();
182
+ }
183
  }
app/code/community/Diglin/Ricento/Helper/Dashboard/Turnover.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Helper/Data.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -34,7 +34,8 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
34
  const CFG_RICARDO_PARTNERKEY = 'ricento/api_config/partner_key_';
35
  const CFG_RICARDO_PARTNERPASS = 'ricento/api_config/partner_pass_';
36
  const CFG_EXPIRATION_NOTIFICATION_DELAY = 'ricento/api_config/expiration_notification_delay'; // in day
37
- const CFG_EMAIL_NOTIFICATION = 'ricento/api_config/email_notification'; // in day
 
38
 
39
  const CFG_SUPPORTED_LANG = 'ricento/api_config/lang';
40
  const DEFAULT_SUPPORTED_LANG = 'de';
@@ -50,6 +51,18 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
50
  const CFG_ORDER_CREATION_EMAIL = 'ricento/global/email_order_creation';
51
  const CFG_MERGE_ORDER = 'ricento/global/merge_order';
52
  const CFG_DECREASE_INVENTORY = 'ricento/global/decrease_inventory';
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  /**
55
  * Cleanup Job config
@@ -69,8 +82,15 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
69
 
70
  const LOG_FILE = 'ricento.log';
71
 
72
- const RICARDO_URL = 'http://www.ricardo.ch';
73
- const RICARDO_URL_HELP_PROMOTION = 'http://www.ricardo.ch/ueber-uns/gebühren/einstelloptionen'; //@todo make it for french too
 
 
 
 
 
 
 
74
 
75
  const NODE_DISPATCHER_TYPES = 'global/ricento/dispatcher/types';
76
  const NODE_PRODUCT_TYPES = 'global/ricento/allow_product_types';
@@ -78,7 +98,6 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
78
  /**
79
  * Payment Config
80
  */
81
- const PAYMENT_CURRENCY = 'payment/ricento/currency';
82
  const PAYMENT_BANK_INFO = 'payment/ricento/bank_transfer_instructions';
83
 
84
  /**
@@ -87,6 +106,12 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
87
  const ORDER_STATUS_PENDING = 'pending_ricento';
88
  const ORDER_STATUS_CANCEL = 'canceled_ricento';
89
 
 
 
 
 
 
 
90
  /**
91
  * @var Mage_Directory_Model_Currency
92
  */
@@ -364,6 +389,7 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
364
 
365
  /**
366
  * Get the default supported lang depending if the partner key is set or not
 
367
  * @return string
368
  */
369
  public function getDefaultSupportedLang()
@@ -415,6 +441,17 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
415
  return Mage::getStoreConfig(self::CFG_EXPIRATION_NOTIFICATION_DELAY, $store);
416
  }
417
 
 
 
 
 
 
 
 
 
 
 
 
418
  /**
419
  * Disable all elements in a form recursively
420
  *
@@ -492,7 +529,6 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
492
  foreach ($supportedLang as $lang) {
493
 
494
  // Prevent to have the default language twice
495
-
496
  if (strtolower($lang) == strtolower($defaultLang)) {
497
  continue;
498
  }
@@ -654,13 +690,13 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
654
  }
655
 
656
  /**
657
- * @return string
658
  */
659
  public function getMemoryLimit()
660
  {
661
  $memoryLimit = trim(strtoupper(ini_get('memory_limit')));
662
 
663
- if (!isSet($memoryLimit[0])){
664
  $memoryLimit = "128M";
665
  }
666
 
@@ -673,7 +709,7 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
673
  if (substr($memoryLimit, -1) == 'G') {
674
  return substr($memoryLimit, 0, -1) * 1024 * 1024 * 1024;
675
  }
676
- return $memoryLimit;
677
  }
678
 
679
  /**
@@ -712,4 +748,105 @@ class Diglin_Ricento_Helper_Data extends Mage_Core_Helper_Abstract
712
  }
713
  return round(($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + Pow(2, 16)) * 1.65);
714
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
34
  const CFG_RICARDO_PARTNERKEY = 'ricento/api_config/partner_key_';
35
  const CFG_RICARDO_PARTNERPASS = 'ricento/api_config/partner_pass_';
36
  const CFG_EXPIRATION_NOTIFICATION_DELAY = 'ricento/api_config/expiration_notification_delay'; // in day
37
+ const CFG_EXPIRATION_NOTIFICATION_VALIDATION_DELAY = 'ricento/api_config/expiration_notification_validation_delay'; // in day
38
+ const CFG_EMAIL_NOTIFICATION = 'ricento/api_config/email_notification';
39
 
40
  const CFG_SUPPORTED_LANG = 'ricento/api_config/lang';
41
  const DEFAULT_SUPPORTED_LANG = 'de';
51
  const CFG_ORDER_CREATION_EMAIL = 'ricento/global/email_order_creation';
52
  const CFG_MERGE_ORDER = 'ricento/global/merge_order';
53
  const CFG_DECREASE_INVENTORY = 'ricento/global/decrease_inventory';
54
+ const CFG_BANNER = 'ricento/global/banner/enabled';
55
+ const CFG_BANNER_XML = 'ricento/global/banner/xml';
56
+ const CFG_STATS = 'ricento/global/stats';
57
+ const CFG_STATS_TEST_MODE = 'ricento/global/stats_test_mode';
58
+ const CFG_STATS_APPID = 'ricento/global/stats_app_id';
59
+ const CFG_STATS_APPID_TEST = 'ricento/global/stats_app_id_test';
60
+
61
+ /**
62
+ * Listing config
63
+ */
64
+ const CFG_MERGE_DESCRIPTIONS = 'ricento/listing/merge_descriptions';
65
+ const CFG_NL2BR = 'ricento/listing/nl2br';
66
 
67
  /**
68
  * Cleanup Job config
82
 
83
  const LOG_FILE = 'ricento.log';
84
 
85
+ const RICARDO_URL = 'http://www.ricardo.ch';
86
+ const RICARDO_URL_HELP_PROMOTION_DE = 'http://www.ricardo.ch/ueber-uns/gebühren/einstelloptionen';
87
+ const RICARDO_URL_HELP_PROMOTION_FR = 'http://www.fr.ricardo.ch/ueber-uns/fr-fr/frais/optionsdepublication';
88
+ const RICARDO_URL_TERMS_DE = 'http://www.ricardo.ch/ueber-uns/de-ch/reglemente.aspx';
89
+ const RICARDO_URL_TERMS_FR = 'http://www.fr.ricardo.ch/ueber-uns/fr-fr/règlements';
90
+ const RICARDO_URL_PRIVACY_DE = self::RICARDO_URL_TERMS_DE;
91
+ const RICARDO_URL_PRIVACY_FR = self::RICARDO_URL_TERMS_FR;
92
+ const RICARDO_URL_FEES_DE = self::RICARDO_URL_TERMS_DE;
93
+ const RICARDO_URL_FEES_FR = self::RICARDO_URL_TERMS_FR;
94
 
95
  const NODE_DISPATCHER_TYPES = 'global/ricento/dispatcher/types';
96
  const NODE_PRODUCT_TYPES = 'global/ricento/allow_product_types';
98
  /**
99
  * Payment Config
100
  */
 
101
  const PAYMENT_BANK_INFO = 'payment/ricento/bank_transfer_instructions';
102
 
103
  /**
106
  const ORDER_STATUS_PENDING = 'pending_ricento';
107
  const ORDER_STATUS_CANCEL = 'canceled_ricento';
108
 
109
+ /**
110
+ * Stock Management
111
+ */
112
+ const INVENTORY_QTY_TYPE_FIX = 'fix';
113
+ const INVENTORY_QTY_TYPE_PERCENT = 'percent';
114
+
115
  /**
116
  * @var Mage_Directory_Model_Currency
117
  */
389
 
390
  /**
391
  * Get the default supported lang depending if the partner key is set or not
392
+ *
393
  * @return string
394
  */
395
  public function getDefaultSupportedLang()
441
  return Mage::getStoreConfig(self::CFG_EXPIRATION_NOTIFICATION_DELAY, $store);
442
  }
443
 
444
+ /**
445
+ * Get the delay in days to notify the owner that the API authorisation must be triggered
446
+ *
447
+ * @param int $store
448
+ * @return mixed
449
+ */
450
+ public function getExpirationNotificationValidationDelay($store = 0)
451
+ {
452
+ return Mage::getStoreConfig(self::CFG_EXPIRATION_NOTIFICATION_VALIDATION_DELAY, $store);
453
+ }
454
+
455
  /**
456
  * Disable all elements in a form recursively
457
  *
529
  foreach ($supportedLang as $lang) {
530
 
531
  // Prevent to have the default language twice
 
532
  if (strtolower($lang) == strtolower($defaultLang)) {
533
  continue;
534
  }
690
  }
691
 
692
  /**
693
+ * @return int
694
  */
695
  public function getMemoryLimit()
696
  {
697
  $memoryLimit = trim(strtoupper(ini_get('memory_limit')));
698
 
699
+ if (!isset($memoryLimit[0])){
700
  $memoryLimit = "128M";
701
  }
702
 
709
  if (substr($memoryLimit, -1) == 'G') {
710
  return substr($memoryLimit, 0, -1) * 1024 * 1024 * 1024;
711
  }
712
+ return (int) $memoryLimit;
713
  }
714
 
715
  /**
748
  }
749
  return round(($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + Pow(2, 16)) * 1.65);
750
  }
751
+
752
+ /**
753
+ * @param int $storeId
754
+ * @return mixed
755
+ */
756
+ public function canMergeDescriptions($storeId = 0)
757
+ {
758
+ return Mage::getStoreConfigFlag(self::CFG_MERGE_DESCRIPTIONS, $storeId);
759
+ }
760
+
761
+ /**
762
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
763
+ * @return int|string
764
+ */
765
+ public function getStartingDate(Diglin_Ricento_Model_Products_Listing_Item $item)
766
+ {
767
+ if ($item->getSalesOptions()->getScheduleOverwriteProductDateStart()) {
768
+ $startDate = $item->getProductsListing()->getSalesOptions()->getScheduleDateStart();
769
+ } else {
770
+ $startDate = $item->getSalesOptions()->getScheduleDateStart();
771
+ }
772
+
773
+ if (!is_null($startDate) || $item->getSalesOptions()->getSalesType() == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
774
+ $startDate = strtotime($startDate);
775
+ }
776
+
777
+ // ricardo.ch constrains, starting date must be in 1 hour in future
778
+ if (is_null($startDate) || $startDate < (time() + 3600)) {
779
+ $startDate = time() + 3600;
780
+ }
781
+
782
+ return $startDate;
783
+ }
784
+
785
+ /**
786
+ * @return string
787
+ */
788
+ public function getFeesRulesUrl()
789
+ {
790
+ if ($this->_getLocaleCodeForApiConfig() == 'fr') {
791
+ return self::RICARDO_URL_FEES_FR;
792
+ } else {
793
+ return self::RICARDO_URL_FEES_DE;
794
+ }
795
+ }
796
+
797
+ /**
798
+ * @return string
799
+ */
800
+ public function getTermsUrl()
801
+ {
802
+ if ($this->_getLocaleCodeForApiConfig() == 'fr') {
803
+ return self::RICARDO_URL_TERMS_FR;
804
+ } else {
805
+ return self::RICARDO_URL_TERMS_DE;
806
+ }
807
+ }
808
+
809
+ /**
810
+ * @return string
811
+ */
812
+ public function getPrivacyUrl()
813
+ {
814
+ if ($this->_getLocaleCodeForApiConfig() == 'fr') {
815
+ return self::RICARDO_URL_PRIVACY_FR;
816
+ } else {
817
+ return self::RICARDO_URL_PRIVACY_DE;
818
+ }
819
+ }
820
+
821
+ /**
822
+ * @return string
823
+ */
824
+ public function getHelpPromotion()
825
+ {
826
+ if ($this->_getLocaleCodeForApiConfig() == 'fr') {
827
+ return self::RICARDO_URL_HELP_PROMOTION_FR;
828
+ } else {
829
+ return self::RICARDO_URL_HELP_PROMOTION_DE;
830
+ }
831
+ }
832
+
833
+ /**
834
+ * @return Varien_Object
835
+ */
836
+ public function getRicardoShippingRegistry()
837
+ {
838
+ if(!Mage::registry('ricardo_shipping')) {
839
+ Mage::register('ricardo_shipping', new Varien_Object());
840
+ };
841
+
842
+ return Mage::registry('ricardo_shipping');
843
+ }
844
+
845
+ /**
846
+ * @return bool
847
+ */
848
+ public function canSendEmailNotification()
849
+ {
850
+ return Mage::getStoreConfigFlag(self::CFG_EMAIL_NOTIFICATION);
851
+ }
852
  }
app/code/community/Diglin/Ricento/Helper/Image.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Ricento
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Helper_Image
14
+ */
15
+ class Diglin_Ricento_Helper_Image extends Mage_Catalog_Helper_Image
16
+ {
17
+ /**
18
+ * @return int
19
+ */
20
+ protected function getWatermarkImageOpacity()
21
+ {
22
+ if ($this->_watermarkImageOpacity) {
23
+ return (int) $this->_watermarkImageOpacity;
24
+ }
25
+
26
+ return (int) $this->_getModel()->getWatermarkImageOpacity();
27
+ }
28
+
29
+ /**
30
+ * @return string
31
+ */
32
+ public function __toString()
33
+ {
34
+ try {
35
+ $model = $this->_getModel();
36
+
37
+ if ($this->getImageFile()) {
38
+ $model->setBaseFile($this->getImageFile());
39
+ } else {
40
+ $model->setBaseFile($this->getProduct()->getData($model->getDestinationSubdir()));
41
+ }
42
+
43
+ if ($model->isCached()) {
44
+ return $model->getNewFile();
45
+ } else {
46
+ if ($this->_scheduleRotate) {
47
+ $model->rotate($this->getAngle());
48
+ }
49
+
50
+ if ($this->_scheduleResize) {
51
+ $model->resize();
52
+ }
53
+
54
+ if ($this->getWatermark()) {
55
+ $model->setWatermark($this->getWatermark());
56
+ }
57
+
58
+ $file = $model->saveFile()->getNewFile();
59
+ }
60
+ } catch (Exception $e) {
61
+ $file = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
62
+ }
63
+ return $file;
64
+ }
65
+ }
app/code/community/Diglin/Ricento/Helper/Price.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
@@ -13,7 +13,12 @@ class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
13
  /**
14
  * @var string
15
  */
16
- protected $_oldCurrency = Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY;
 
 
 
 
 
17
 
18
  /**
19
  * Format the price with the ricardo supported currencies
@@ -41,19 +46,22 @@ class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
41
  */
42
  public function startCurrencyEmulation($websiteId = null)
43
  {
44
- $partnerConfiguration = Mage::getSingleton('diglin_ricento/api_services_system')
45
- ->setCurrentWebsite($websiteId)
46
- ->getPartnerConfigurations();
47
-
48
- if (isset($partnerConfiguration['CurrencyPrefix'])) {
49
- $ricardoCurrency = $partnerConfiguration['CurrencyPrefix'];
50
- } else {
51
- $ricardoCurrency = Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY;
52
- }
53
 
54
  $store = Mage::app()->getWebsite($websiteId)->getDefaultStore();
55
- $this->_oldCurrency = $store->getCurrentCurrency();
56
- $store->setCurrentCurrency(Mage::getModel('directory/currency')->load($ricardoCurrency));
 
 
 
57
 
58
  return $this;
59
  }
@@ -67,6 +75,7 @@ class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
67
  public function stopCurrencyEmulation($websiteId = null)
68
  {
69
  Mage::app()->getWebsite($websiteId)->getDefaultStore()->setCurrentCurrency($this->_oldCurrency);
 
70
 
71
  return $this;
72
  }
@@ -119,4 +128,92 @@ class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
119
  }
120
  return $price;
121
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Helper_Price extends Mage_Core_Helper_Abstract
13
  /**
14
  * @var string
15
  */
16
+ protected $_oldCurrency = null;
17
+
18
+ /**
19
+ * @var array
20
+ */
21
+ protected $_currencyCache = array();
22
 
23
  /**
24
  * Format the price with the ricardo supported currencies
46
  */
47
  public function startCurrencyEmulation($websiteId = null)
48
  {
49
+ // $partnerConfiguration = Mage::getSingleton('diglin_ricento/api_services_system')
50
+ // ->setCurrentWebsite($websiteId)
51
+ // ->getPartnerConfigurations();
52
+ //
53
+ // if (isset($partnerConfiguration['CurrencyPrefix'])) {
54
+ // $ricardoCurrency = $partnerConfiguration['CurrencyPrefix'];
55
+ // } else {
56
+ // $ricardoCurrency = Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY;
57
+ // }
58
 
59
  $store = Mage::app()->getWebsite($websiteId)->getDefaultStore();
60
+
61
+ if ($store->getCurrentCurrency()->getCode() != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
62
+ $this->_oldCurrency = $store->getCurrentCurrency();
63
+ $store->setCurrentCurrency(Mage::getModel('directory/currency')->load(Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY));
64
+ }
65
 
66
  return $this;
67
  }
75
  public function stopCurrencyEmulation($websiteId = null)
76
  {
77
  Mage::app()->getWebsite($websiteId)->getDefaultStore()->setCurrentCurrency($this->_oldCurrency);
78
+ $this->_oldCurrency = null;
79
 
80
  return $this;
81
  }
128
  }
129
  return $price;
130
  }
131
+
132
+ /**
133
+ * @param float $price
134
+ * @param null|int $websiteId
135
+ * @param null|string $defaultCurrency
136
+ * @return array
137
+ * @throws Exception
138
+ * @throws Mage_Core_Exception
139
+ */
140
+ public function formatDoubleCurrency($price, $websiteId = null, $defaultCurrency = null)
141
+ {
142
+ $priceCurrentCurrency = null;
143
+ $formattedPrice = array();
144
+ $store = Mage::app()->getWebsite($websiteId)->getDefaultStore();
145
+
146
+ if ($defaultCurrency == Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
147
+ // CHF Currency
148
+ $formattedPrice['left_currency'] = $this->formatPrice($price, $websiteId);
149
+
150
+ // Base Currency
151
+ if ($store->getBaseCurrencyCode() != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
152
+ $priceCurrency = $this->convert($price, Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY, $store->getBaseCurrencyCode(), $websiteId);
153
+ $formattedPrice['right_currency'] = $store->formatPrice($priceCurrency);
154
+ }
155
+ } else {
156
+ // Base Currency
157
+ $formattedPrice['left_currency'] = $store->formatPrice($price);
158
+
159
+ // CHF Currency
160
+ if ($store->getBaseCurrencyCode() != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
161
+ $priceCurrency = $this->convert($price, $store->getBaseCurrencyCode(), Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY, $websiteId);
162
+ $formattedPrice['right_currency'] = $this->formatPrice($priceCurrency, $websiteId);
163
+ }
164
+ }
165
+
166
+ return $formattedPrice;
167
+ }
168
+
169
+ /**
170
+ * @param float $price
171
+ * @param string $from
172
+ * @param null|string $to
173
+ * @return float|null
174
+ * @throws Exception
175
+ * @throws Mage_Core_Exception
176
+ */
177
+ public function convert($price, $from, $to = null, $websiteId = null)
178
+ {
179
+ $priceCurrency = null;
180
+ $store = Mage::app()->getWebsite($websiteId)->getDefaultStore();
181
+
182
+ try {
183
+ if ($from == Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY && $to == $store->getBaseCurrencyCode()) {
184
+ /**
185
+ * Magento cannot convert from CHF to Base Currency Code
186
+ */
187
+ $rate = $this->getCurrency($store->getBaseCurrencyCode())->getRate($from);
188
+ if ($rate) {
189
+ $priceCurrency = $price / $rate;
190
+ } else {
191
+ throw new Exception(Mage::helper('directory')->__('Undefined rate from "%s-%s".',
192
+ Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY,
193
+ $store->getBaseCurrencyCode())
194
+ );
195
+ }
196
+ } else {
197
+ $priceCurrency = $this->getCurrency($from)->convert($price, $this->getCurrency($to));
198
+ }
199
+ } catch (Exception $e) {
200
+ $priceCurrency = $this->__('NaN');
201
+ Mage::log($e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
202
+ }
203
+
204
+ return $priceCurrency;
205
+ }
206
+
207
+ /**
208
+ * @param string $currencyCode
209
+ * @return Mage_Directory_Model_Currency
210
+ */
211
+ public function getCurrency($currencyCode)
212
+ {
213
+ if (empty($this->_currencyCache[$currencyCode])) {
214
+ $this->_currencyCache[$currencyCode] = Mage::getModel('directory/currency')->load($currencyCode);
215
+ }
216
+
217
+ return $this->_currencyCache[$currencyCode];
218
+ }
219
  }
app/code/community/Diglin/Ricento/Helper/Support.php ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Helper_Support
14
+ */
15
+ class Diglin_Ricento_Helper_Support extends Mage_Core_Helper_Abstract
16
+ {
17
+ /**
18
+ * @return string
19
+ */
20
+ public function exportAll()
21
+ {
22
+ $folder = Mage::getBaseDir('tmp') . DS . 'export' . DS . 'ricento';
23
+ $io = new Varien_Io_File();
24
+ $io->mkdir($folder);
25
+
26
+ $this->getPhpInfo($folder);
27
+ $this->getPhpExtensions($folder);
28
+ $this->getRicentoConfig($folder);
29
+ $this->getDeveloperConfig($folder);
30
+ $this->getRicentoTables($folder);
31
+ $this->getMagentoModules($folder);
32
+ $this->getMagentoConfig($folder);
33
+
34
+ $exceptionFile = Mage::getStoreConfig(Mage_Core_Model_Session_Abstract::XML_PATH_LOG_EXCEPTION_FILE);
35
+ // $systemFile = Mage::getStoreConfig('dev/log/file');
36
+
37
+ $io->cp(Mage::getBaseDir('var') . DS . 'log' . DS . Diglin_Ricento_Helper_Data::LOG_FILE, $folder . DS . Diglin_Ricento_Helper_Data::LOG_FILE);
38
+ $io->cp(Mage::getBaseDir('var') . DS . 'log' . DS . $exceptionFile, $folder . DS . $exceptionFile);
39
+
40
+ $destination = $folder . 'tar';
41
+ $tar = new Mage_Archive_Tar();
42
+ $tar->pack($folder, $destination);
43
+
44
+ $gzDestination = $destination . '.gz';
45
+ $tar = new Mage_Archive_Gz();
46
+ $tar->pack($destination, $gzDestination);
47
+
48
+ $io->rmdir($folder, true);
49
+
50
+ return $gzDestination;
51
+ }
52
+
53
+ /**
54
+ * @param $destination
55
+ * @return mixed
56
+ */
57
+ public function getPhpInfo($destination)
58
+ {
59
+ $phpinfo = new Varien_Object(Mage::helper('diglin_ricento/support')->getPhpInfoArray());
60
+ return $this->writeFile($destination, 'phpinfo.txt', $phpinfo->toJson());
61
+ }
62
+
63
+ /**
64
+ * @param $destination
65
+ * @return mixed
66
+ */
67
+ public function getRicentoConfig($destination)
68
+ {
69
+ $xml = Mage::getConfig()->getNode('default/ricento')->asNiceXml();
70
+ return $this->writeFile($destination, 'ricento_config.xml', $xml);
71
+ }
72
+
73
+ /**
74
+ * @param $destination
75
+ * @return mixed
76
+ */
77
+ public function getDeveloperConfig($destination)
78
+ {
79
+ $xml = Mage::getConfig()->getNode('default/dev')->asNiceXml();
80
+ return $this->writeFile($destination, 'config_dev.xml', $xml);
81
+ }
82
+
83
+ /**
84
+ * @param $destination
85
+ * @return array
86
+ */
87
+ public function getRicentoTables($destination)
88
+ {
89
+ $resource = Mage::getSingleton('core/resource');
90
+ $read = $resource->getConnection('core_read');
91
+
92
+ $tables = array(
93
+ 'entity_id_001' => $resource->getTableName('diglin_ricento/api_token'),
94
+ 'entity_id_002' => $resource->getTableName('diglin_ricento/products_listing'),
95
+ 'item_id_003' => $resource->getTableName('diglin_ricento/products_listing_item'),
96
+ 'log_id_004' => $resource->getTableName('diglin_ricento/listing_log'),
97
+ 'entity_id_005' => $resource->getTableName('diglin_ricento/sales_options'),
98
+ 'transaction_id_006' => $resource->getTableName('diglin_ricento/sales_transaction'),
99
+ 'rule_id_007' => $resource->getTableName('diglin_ricento/shipping_payment_rule'),
100
+ 'job_id_008' => $resource->getTableName('diglin_ricento/sync_job'),
101
+ 'job_listing_id_009' => $resource->getTableName('diglin_ricento/sync_job_listing'),
102
+ 'entity_id_010' => $resource->getTableName('sales/quote'),
103
+ 'item_id_011' => $resource->getTableName('sales/quote_item'),
104
+ 'entity_id_012' => $resource->getTableName('sales/order'),
105
+ 'item_id_013' => $resource->getTableName('sales/order_item'),
106
+ 'entity_id_014' => $resource->getTableName('sales/order_payment')
107
+ );
108
+
109
+ $files = array();
110
+ foreach ($tables as $key => $table) {
111
+
112
+ // Anonymize
113
+ $cols = array('*');
114
+ if (in_array($key, array('entity_id_010', 'entity_id_010'))) {
115
+ $cols = $read->fetchCol('describe ' . $table);
116
+ $found = array_search('customer_email', $cols);
117
+ if ($found !== false) {
118
+ unset($cols[$found]);
119
+ }
120
+ $found = array_search('customer_firstname', $cols);
121
+ if ($found !== false) {
122
+ unset($cols[$found]);
123
+ }
124
+ $found = array_search('customer_lastname', $cols);
125
+ if ($found !== false) {
126
+ unset($cols[$found]);
127
+ }
128
+ }
129
+
130
+ $select = $read
131
+ ->select()
132
+ ->from($table, $cols)
133
+ ->limit(500)
134
+ ->order(array( substr($key, 0, -4) . ' DESC'));
135
+
136
+
137
+
138
+ $object = new Varien_Object($read->fetchAll($select));
139
+ $files[] = $this->writeFile($destination, $table . '.csv', $object->toArray(), true);
140
+ }
141
+
142
+ return $files;
143
+ }
144
+
145
+ /**
146
+ * @param $destination
147
+ * @return mixed
148
+ */
149
+ public function getPhpExtensions($destination)
150
+ {
151
+ $content = implode("\n", get_loaded_extensions());
152
+ return $this->writeFile($destination, 'php_extensions.txt', $content);
153
+ }
154
+
155
+ /**
156
+ * @param $destination
157
+ * @return mixed
158
+ */
159
+ public function getMagentoConfig($destination)
160
+ {
161
+ $countSimpleProduct = Mage::getResourceModel('catalog/product_collection')
162
+ ->setStoreId(0)
163
+ ->addFieldToFilter('type_id', Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
164
+ ->getSize();
165
+
166
+ $countConfigurableProduct = Mage::getResourceModel('catalog/product_collection')
167
+ ->setStoreId(0)
168
+ ->addFieldToFilter('type_id', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
169
+ ->getSize();
170
+
171
+ $countGroupedProduct = Mage::getResourceModel('catalog/product_collection')
172
+ ->setStoreId(0)
173
+ ->addFieldToFilter('type_id', Mage_Catalog_Model_Product_Type::TYPE_GROUPED)
174
+ ->getSize();
175
+
176
+ $user = Mage::getSingleton('admin/session')->getUser();
177
+ $content = 'Current Backend User: ' . $user->getUsername() . ' - Email: ' . $user->getEmail() . "\n";
178
+ $content .= 'Magento Version: ' . Mage::getVersion() . ' ' . Mage::getEdition() . ' Edition' . "\n";
179
+ $content .= "Qty of: Simple Products #$countSimpleProduct - Configurable Products: #$countConfigurableProduct - Grouped Product: #$countGroupedProduct";
180
+
181
+ return $this->writeFile($destination, 'magento_info.txt', $content);
182
+ }
183
+
184
+ /**
185
+ * @param $destination
186
+ * @return mixed
187
+ */
188
+ public function getMagentoModules($destination)
189
+ {
190
+ $modules = (array) Mage::getConfig()->getModuleConfig();
191
+
192
+ $list = array();
193
+ foreach ($modules as $key => $module) {
194
+ $list[$key] = array('version' => $module->version, 'code_pool' => $module->codePool);
195
+ }
196
+
197
+ $content = new Varien_Object($list);
198
+
199
+ return $this->writeFile($destination, 'magento_modules.json', $content->toJson());
200
+ }
201
+
202
+ /**
203
+ * @param $destination
204
+ * @param $content
205
+ * @return mixed
206
+ * @throws Exception
207
+ */
208
+ public function writeFile($destination, $filename, $content, $csv = false)
209
+ {
210
+ $file = $destination . DS . $filename;
211
+ $ioFile = new Varien_Io_File();
212
+ $ioFile->cd($destination);
213
+ $ioFile->streamOpen($file);
214
+ if ($csv) {
215
+ foreach ($content as $row) {
216
+ $ioFile->streamWriteCsv($row);
217
+ }
218
+ } else {
219
+ $ioFile->streamWrite($content);
220
+ }
221
+ $ioFile->streamClose();
222
+
223
+ return $file;
224
+ }
225
+
226
+ /**
227
+ * @return array|mixed
228
+ */
229
+ public function getPhpInfoArray()
230
+ {
231
+ try {
232
+
233
+ ob_start();
234
+ phpinfo(INFO_ALL);
235
+
236
+ $pi = preg_replace(
237
+ array(
238
+ '#^.*<body>(.*)</body>.*$#m', '#<h2>PHP License</h2>.*$#ms',
239
+ '#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#',
240
+ "#[ \t]+#", '#&nbsp;#', '# +#', '# class=".*?"#', '%&#039;%',
241
+ '#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a><h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#',
242
+ '#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#',
243
+ '#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#',
244
+ "# +#", '#<tr>#', '#</tr>#'),
245
+ array(
246
+ '$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ',
247
+ '<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$2</td></tr>'.
248
+ "\n".'<tr><td>PHP Egg</td><td>$1</td></tr>',
249
+ '<tr><td>PHP Credits Egg</td><td>$1</td></tr>',
250
+ '<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" .
251
+ '<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'
252
+ ), ob_get_clean()
253
+ );
254
+
255
+ $sections = explode('<h2>', strip_tags($pi, '<h2><th><td>'));
256
+ unset($sections[0]);
257
+
258
+ $pi = array();
259
+ foreach ($sections as $section) {
260
+ $n = substr($section, 0, strpos($section, '</h2>'));
261
+ preg_match_all(
262
+ '#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#',
263
+ $section,
264
+ $askapache,
265
+ PREG_SET_ORDER
266
+ );
267
+ foreach ($askapache as $m) {
268
+ if (!isset($m[0]) || !isset($m[1]) || !isset($m[2])) {
269
+ continue;
270
+ }
271
+ $pi[$n][$m[1]]=(!isset($m[3])||$m[2]==$m[3])?$m[2]:array_slice($m,2);
272
+ }
273
+ }
274
+
275
+ } catch (Exception $exception) {
276
+ return array();
277
+ }
278
+
279
+ return $pi;
280
+ }
281
+
282
+ public function sendConfigurationFile($content, $filename = 'ricardo_support.tar.gz', $replyTo = '', $message = '')
283
+ {
284
+ $template = 'ricento_support';
285
+
286
+ try {
287
+ if (! Mage::getConfig()->getNode(Mage_Core_Model_Email_Template::XML_PATH_TEMPLATE_EMAIL . '/' . $template)) {
288
+ Mage::throwException(Mage::helper('diglin_ricento')->__('Wrong transactional support email template.'));
289
+ }
290
+
291
+ $recipient = array(
292
+ 'name' => 'Support Diglin',
293
+ 'email' => $this->getSupportEmail()
294
+ );
295
+
296
+ $translate = Mage::getSingleton('core/translate');
297
+ $translate->setTranslateInline(false);
298
+
299
+ /* @var $emailTemplate Mage_Core_Model_Email_Template */
300
+ $emailTemplate = Mage::getModel('core/email_template')
301
+ ->setDesignConfig(array('area' => 'adminhtml', 'store' => 0));
302
+
303
+ if (!empty($replyTo)) {
304
+ $emailTemplate
305
+ ->setReplyTo($replyTo)
306
+ ->setReturnPath($replyTo);
307
+ }
308
+
309
+ $variables = array(
310
+ 'shopname' => Mage::getBaseUrl(),
311
+ 'message' => $message
312
+ );
313
+
314
+ $attachment = $emailTemplate->getMail()->createAttachment($content);
315
+ $attachment->type = 'application/octet-stream';
316
+ $attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
317
+ $attachment->encoding = Zend_Mime::ENCODING_BASE64;
318
+ $attachment->filename = $filename;
319
+
320
+ $emailTemplate->sendTransactional($template, // xml path email template
321
+ Mage::getStoreConfig('contacts/email/sender_email_identity'),//sender - normally general contact
322
+ $recipient['email'],
323
+ $recipient['name'],
324
+ $variables,
325
+ 0);
326
+
327
+ $translate->setTranslateInline(true);
328
+
329
+ } catch (Exception $e) {
330
+ Mage::logException($e);
331
+ }
332
+
333
+ return;
334
+ }
335
+
336
+ public function getSupportEmail()
337
+ {
338
+ return str_replace('[/at/]', '@', Mage::getStoreConfig('support/email'));
339
+ }
340
+ }
app/code/community/Diglin/Ricento/Helper/Tools.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -15,6 +15,7 @@
15
  class Diglin_Ricento_Helper_Tools extends Mage_Core_Helper_Abstract
16
  {
17
  const XML_PATH_EMAIL_NOTIFICATION_TEMPLATE = 'system/messages/notification_email_template';
 
18
  const XML_PATH_PM_EMAIL_TEMPLATE = 'system/messages/pm_email_template';
19
 
20
  /**
@@ -59,6 +60,20 @@ class Diglin_Ricento_Helper_Tools extends Mage_Core_Helper_Abstract
59
  );
60
  }
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  /**
63
  * Send a notification email to the customer or the shop managers
64
  *
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
15
  class Diglin_Ricento_Helper_Tools extends Mage_Core_Helper_Abstract
16
  {
17
  const XML_PATH_EMAIL_NOTIFICATION_TEMPLATE = 'system/messages/notification_email_template';
18
+ const XML_PATH_TOKEN_EXPIRATION_TEMPLATE = 'system/messages/token_expiration_email_template';
19
  const XML_PATH_PM_EMAIL_TEMPLATE = 'system/messages/pm_email_template';
20
 
21
  /**
60
  );
61
  }
62
 
63
+ /**
64
+ * @param array $variables
65
+ */
66
+ public static function sendMerchantAuthorizationNotification(array $variables)
67
+ {
68
+ self::sendNotification(
69
+ Mage::getStoreConfig('contacts/email/sender_email_identity'), // e.g. 'general'
70
+ 'support',
71
+ Mage::getStoreConfig(self::XML_PATH_TOKEN_EXPIRATION_TEMPLATE),
72
+ $variables,
73
+ Mage::app()->getStore()->getId()
74
+ );
75
+ }
76
+
77
  /**
78
  * Send a notification email to the customer or the shop managers
79
  *
app/code/community/Diglin/Ricento/Model/.DS_Store CHANGED
Binary file
app/code/community/Diglin/Ricento/Model/Api/Services/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -165,15 +165,15 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
165
  {
166
  $data = array();
167
  $helper = Mage::helper('diglin_ricento');
168
- $key = $this->_underscore(substr($method,3));
169
  $cacheKey = $key . Mage::registry('ricardo_api_lang');
170
  $profilerName = $this->_profilerPrefix . strtoupper($key);
171
  $serviceModel = $this->getServiceModel();
172
 
173
  try {
174
- switch (substr($method, 0, 3)) {
175
- case 'get' :
176
- if (method_exists($serviceModel, $method) && is_callable(array($serviceModel, $method), true)) {
177
 
178
  Varien_Profiler::start($profilerName);
179
 
@@ -198,11 +198,8 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
198
  Varien_Profiler::stop($profilerName);
199
 
200
  return $data;
201
- }
202
- break;
203
- case 'set':
204
- if (method_exists($serviceModel, $method) && is_callable(array($serviceModel, $method), true)) {
205
-
206
  Varien_Profiler::start($profilerName);
207
 
208
  $this->_prepareCredentialToken();
@@ -214,11 +211,8 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
214
  Varien_Profiler::stop($profilerName);
215
 
216
  return $this;
217
- }
218
- break;
219
- default:
220
- if (method_exists($serviceModel, $method) && is_callable(array($serviceModel, $method), true)) {
221
-
222
  Varien_Profiler::start($profilerName);
223
 
224
  $this->_prepareCredentialToken();
@@ -230,8 +224,8 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
230
  Varien_Profiler::stop($profilerName);
231
 
232
  return $data;
233
- }
234
- break;
235
  }
236
  } catch (\Diglin\Ricardo\Exceptions\CurlException $e) {
237
  Mage::logException($e);
@@ -252,7 +246,7 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
252
  */
253
  public function setCanUseCache($canUseCache)
254
  {
255
- $this->_canUseCache = (bool) $canUseCache;
256
  return $this;
257
  }
258
 
@@ -372,8 +366,8 @@ abstract class Diglin_Ricento_Model_Api_Services_Abstract extends Varien_Object
372
  ->setWebsiteId($this->getCurrentWebsite()->getId())
373
  ->setTokenType(ServiceAbstract::TOKEN_TYPE_TEMPORARY)
374
  ->setExpirationDate(
375
- Mage::helper('diglin_ricento/api')->calculateSessionExpirationDate($security->getCredentialTokenSessionDuration(), $security->getCredentialTokenSessionStart())
376
- )
377
  ->save();
378
 
379
  return $this;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
165
  {
166
  $data = array();
167
  $helper = Mage::helper('diglin_ricento');
168
+ $key = $this->_underscore(substr($method, 3));
169
  $cacheKey = $key . Mage::registry('ricardo_api_lang');
170
  $profilerName = $this->_profilerPrefix . strtoupper($key);
171
  $serviceModel = $this->getServiceModel();
172
 
173
  try {
174
+ if (method_exists($serviceModel, $method) && is_callable(array($serviceModel, $method), true)) {
175
+ switch (substr($method, 0, 3)) {
176
+ case 'get' :
177
 
178
  Varien_Profiler::start($profilerName);
179
 
198
  Varien_Profiler::stop($profilerName);
199
 
200
  return $data;
201
+ break;
202
+ case 'set':
 
 
 
203
  Varien_Profiler::start($profilerName);
204
 
205
  $this->_prepareCredentialToken();
211
  Varien_Profiler::stop($profilerName);
212
 
213
  return $this;
214
+ break;
215
+ default:
 
 
 
216
  Varien_Profiler::start($profilerName);
217
 
218
  $this->_prepareCredentialToken();
224
  Varien_Profiler::stop($profilerName);
225
 
226
  return $data;
227
+ break;
228
+ }
229
  }
230
  } catch (\Diglin\Ricardo\Exceptions\CurlException $e) {
231
  Mage::logException($e);
246
  */
247
  public function setCanUseCache($canUseCache)
248
  {
249
+ $this->_canUseCache = (bool)$canUseCache;
250
  return $this;
251
  }
252
 
366
  ->setWebsiteId($this->getCurrentWebsite()->getId())
367
  ->setTokenType(ServiceAbstract::TOKEN_TYPE_TEMPORARY)
368
  ->setExpirationDate(
369
+ Mage::helper('diglin_ricento/api')->calculateSessionExpirationDate($security->getCredentialTokenSessionDuration(), $security->getCredentialTokenSessionStart())
370
+ )
371
  ->save();
372
 
373
  return $this;
app/code/community/Diglin/Ricento/Model/Api/Services/Customer.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Api/Services/Search.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Model_Api_Services_Search
14
+ */
15
+ class Diglin_Ricento_Model_Api_Services_Search extends Diglin_Ricento_Model_Api_Services_Abstract
16
+ {
17
+ /**
18
+ * @var string
19
+ */
20
+ protected $_serviceName = 'search';
21
+
22
+ /**
23
+ * @var string
24
+ */
25
+ protected $_model = '\Diglin\Ricardo\Managers\Search';
26
+
27
+ /**
28
+ * Overwritten just to get the class/method auto completion
29
+ * Be aware that using directly this method to use the methods of the object instead of using
30
+ * the magic methods of the abstract (__call, __get, __set) will prevent to use the cache of Magento
31
+ * but also some logic related to the secure token
32
+ *
33
+ * @return \Diglin\Ricardo\Managers\Search
34
+ */
35
+ public function getServiceModel()
36
+ {
37
+ return parent::getServiceModel();
38
+ }
39
+ }
app/code/community/Diglin/Ricento/Model/Api/Services/Security.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Api/Services/Sell.php CHANGED
@@ -5,10 +5,20 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
  * Class Diglin_Ricento_Model_Api_Services_Sell
14
  */
@@ -54,6 +64,7 @@ class Diglin_Ricento_Model_Api_Services_Sell extends Diglin_Ricento_Model_Api_Se
54
  public function insertArticle(Diglin_Ricento_Model_Products_Listing_Item $item)
55
  {
56
  $articleResult = array();
 
57
 
58
  try {
59
  $start = microtime(true);
@@ -64,15 +75,13 @@ class Diglin_Ricento_Model_Api_Services_Sell extends Diglin_Ricento_Model_Api_Se
64
  if (Mage::helper('diglin_ricento')->isDebugEnabled()) {
65
  Mage::log('Time to insert article ' . (microtime(true) - $start) . ' sec', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE);
66
  }
67
- } catch (\Diglin\Ricardo\Exceptions\ExceptionAbstract $e) {
68
- $this->_updateCredentialToken();
69
- Mage::logException($e);
70
-
71
- if (Mage::helper('diglin_ricento')->isDebugEnabled()) {
72
  $insertArticle->setPictures(null, true); // remove picture otherwise log is extremely long
73
- Mage::log($insertArticle->getDataProperties(), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE);
74
  }
75
-
 
76
  $this->_handleSecurityException($e);
77
  }
78
 
@@ -81,36 +90,35 @@ class Diglin_Ricento_Model_Api_Services_Sell extends Diglin_Ricento_Model_Api_Se
81
  return $articleResult;
82
  }
83
 
84
- public function updateArticle(Diglin_Ricento_Model_Products_Listing_Item $item)
85
- {
86
- // @todo when needed
87
- return $this;
88
- }
89
-
90
  /**
91
- * Not used
92
- *
93
- * @param Diglin_Ricento_Model_Products_Listing_Item $item
94
- * @return array|bool
95
  */
96
- public function relistArticle(Diglin_Ricento_Model_Products_Listing_Item $item)
97
  {
98
- $relistArticleResult = array();
99
-
100
- if (!$item->getRicardoArticleId() || $item->getIsPlanned()) {
101
- return false;
102
- }
103
 
104
  try {
105
- $relistArticleResult = parent::relistArticle($item->getRicardoArticleId());
106
 
107
- } catch (\Diglin\Ricardo\Exceptions\ExceptionAbstract $e) {
108
- $this->_updateCredentialToken();
 
 
 
 
 
 
109
  Mage::logException($e);
 
110
  $this->_handleSecurityException($e);
111
  }
112
 
113
- return $relistArticleResult;
 
 
114
  }
115
 
116
  /**
@@ -141,22 +149,22 @@ class Diglin_Ricento_Model_Api_Services_Sell extends Diglin_Ricento_Model_Api_Se
141
 
142
  /**
143
  * Ricardo API is special here - if article is closed, returned values may be empty !!!
144
- * If it's closed/deleted or an error occurred, an exception is triggered
145
  */
146
  if (isset($result['IsClosed'])) {
147
  unset($parameter);
148
  return true;
149
  }
150
- } catch (\Diglin\Ricardo\Exceptions\ExceptionAbstract $e) {
151
- $this->_updateCredentialToken();
152
  Mage::logException($e);
 
153
 
154
  try {
155
  $this->_handleSecurityException($e);
156
- } catch (\Diglin\Ricardo\Exceptions\GeneralException $e) {
157
  switch ($e->getCode()) {
158
- case \Diglin\Ricardo\Enums\GeneralErrors::DELETEPLANNEDFAILED:
159
- case \Diglin\Ricardo\Enums\GeneralErrors::CLOSEAUCTIONFAILED:
160
  return false;
161
  default:
162
  break;
@@ -167,4 +175,116 @@ class Diglin_Ricento_Model_Api_Services_Sell extends Diglin_Ricento_Model_Api_Se
167
 
168
  return false;
169
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
+ use Diglin\Ricardo\Managers\Sell\Parameter\GetArticlesFeeParameter;
13
+ use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
14
+ use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticlesParameter;
15
+ use Diglin\Ricardo\Managers\Sell\Parameter\ClosePlannedArticleParameter;
16
+ use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticlesParameter;
17
+
18
+ use Diglin\Ricardo\Exceptions\ExceptionAbstract;
19
+ use Diglin\Ricardo\Exceptions\GeneralException;
20
+ use Diglin\Ricardo\Enums\GeneralErrors;
21
+
22
  /**
23
  * Class Diglin_Ricento_Model_Api_Services_Sell
24
  */
64
  public function insertArticle(Diglin_Ricento_Model_Products_Listing_Item $item)
65
  {
66
  $articleResult = array();
67
+ $insertArticle = null;
68
 
69
  try {
70
  $start = microtime(true);
75
  if (Mage::helper('diglin_ricento')->isDebugEnabled()) {
76
  Mage::log('Time to insert article ' . (microtime(true) - $start) . ' sec', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE);
77
  }
78
+ } catch (ExceptionAbstract $e) {
79
+ if (Mage::helper('diglin_ricento')->isDebugEnabled() && $insertArticle instanceof InsertArticlesParameter) {
 
 
 
80
  $insertArticle->setPictures(null, true); // remove picture otherwise log is extremely long
81
+ Mage::log($insertArticle->getDataProperties(), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
82
  }
83
+ Mage::logException($e);
84
+ $this->_updateCredentialToken();
85
  $this->_handleSecurityException($e);
86
  }
87
 
90
  return $articleResult;
91
  }
92
 
 
 
 
 
 
 
93
  /**
94
+ * @param InsertArticlesParameter $insertArticlesParameter
95
+ * @return array
96
+ * @throws Diglin_Ricento_Exception
97
+ * @throws Exception
98
  */
99
+ public function insertArticles(InsertArticlesParameter $insertArticlesParameter)
100
  {
101
+ $articlesResult = array();
 
 
 
 
102
 
103
  try {
104
+ $start = microtime(true);
105
 
106
+ $insertArticlesParameter->setAntiforgeryToken($this->getServiceManager()->getSecurityManager()->getAntiforgeryToken());
107
+ $articlesResult = parent::insertArticles($insertArticlesParameter);
108
+
109
+ if (Mage::helper('diglin_ricento')->isDebugEnabled()) {
110
+ Mage::log('Time to insert the articles ' . (microtime(true) - $start) . ' sec', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
111
+ Mage::log('Max Memory Usage ' . Mage::helper('diglin_ricento')->getMemoryUsage() . ' bytes', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
112
+ }
113
+ } catch (ExceptionAbstract $e) {
114
  Mage::logException($e);
115
+ $this->_updateCredentialToken();
116
  $this->_handleSecurityException($e);
117
  }
118
 
119
+ unset($insertArticlesParameter);
120
+
121
+ return $articlesResult;
122
  }
123
 
124
  /**
149
 
150
  /**
151
  * Ricardo API is special here - if article is closed, returned values may be empty !!!
152
+ * If it's not closed/deleted or an error occurred, an exception is triggered
153
  */
154
  if (isset($result['IsClosed'])) {
155
  unset($parameter);
156
  return true;
157
  }
158
+ } catch (ExceptionAbstract $e) {
 
159
  Mage::logException($e);
160
+ $this->_updateCredentialToken();
161
 
162
  try {
163
  $this->_handleSecurityException($e);
164
+ } catch (GeneralException $e) {
165
  switch ($e->getCode()) {
166
+ case GeneralErrors::DELETEPLANNEDFAILED:
167
+ case GeneralErrors::CLOSEAUCTIONFAILED:
168
  return false;
169
  default:
170
  break;
175
 
176
  return false;
177
  }
178
+
179
+ /**
180
+ * @param array $articles
181
+ * @param int $websiteId
182
+ * @return array|bool
183
+ * @throws Diglin_Ricento_Exception
184
+ * @throws Exception
185
+ * @throws \Diglin\Ricardo\Exceptions\GeneralException
186
+ */
187
+ public function stopArticles(array $articles, $websiteId = 0)
188
+ {
189
+ $helperApi = Mage::helper('diglin_ricento/api');
190
+ $results = array();
191
+
192
+ if (isset($articles['planned']) && count($articles['planned'])) {
193
+ $deletePlannedArticlesParameter = new DeletePlannedArticlesParameter();
194
+ $deletePlannedArticlesParameter
195
+ ->setAntiforgeryToken($helperApi->getAntiforgeryToken($websiteId));
196
+
197
+ foreach ($articles['planned'] as $article) {
198
+ $closePlanned = new ClosePlannedArticleParameter();
199
+ $closePlanned->setPlannedArticleId($article);
200
+ $deletePlannedArticlesParameter->setArticles($closePlanned);
201
+ }
202
+
203
+ try {
204
+ $results = parent::deletePlannedArticles($deletePlannedArticlesParameter);
205
+ } catch (ExceptionAbstract $e) {
206
+ Mage::logException($e);
207
+ $this->_updateCredentialToken();
208
+
209
+ try {
210
+ $this->_handleSecurityException($e);
211
+ } catch (GeneralException $e) {
212
+ switch ($e->getCode()) {
213
+ case GeneralErrors::DELETEPLANNEDFAILED:
214
+ case GeneralErrors::CLOSEAUCTIONFAILED:
215
+ return false;
216
+ default:
217
+ break;
218
+ }
219
+ throw $e;
220
+ }
221
+ }
222
+ }
223
+
224
+ if (isset($articles['live']) && count($articles['live'])) {
225
+ $closesParameter = new CloseArticlesParameter();
226
+ $closesParameter
227
+ ->setAntiforgeryToken($helperApi->getAntiforgeryToken($websiteId));
228
+
229
+ foreach ($articles['live'] as $article) {
230
+ $closesParameter->setArticleIds($article);
231
+ }
232
+
233
+ try {
234
+ $results = array_merge($results, parent::closeArticles($closesParameter));
235
+ } catch (\Diglin\Ricardo\Exceptions\ExceptionAbstract $e) {
236
+ Mage::logException($e);
237
+ $this->_updateCredentialToken();
238
+
239
+ try {
240
+ $this->_handleSecurityException($e);
241
+ } catch (GeneralException $e) {
242
+ switch ($e->getCode()) {
243
+ case GeneralErrors::DELETEPLANNEDFAILED:
244
+ case GeneralErrors::CLOSEAUCTIONFAILED:
245
+ return false;
246
+ default:
247
+ break;
248
+ }
249
+ throw $e;
250
+ }
251
+ }
252
+ }
253
+
254
+ return $results;
255
+ }
256
+
257
+ /**
258
+ * @param array $articlesDetails of Diglin\Ricardo\Managers\Sell\Parameter\GetArticleFeeParameter
259
+ * @return bool | array
260
+ * @throws Diglin_Ricento_Exception
261
+ * @throws Exception
262
+ */
263
+ public function getArticlesFee(array $articlesDetails)
264
+ {
265
+ try {
266
+ if (empty($articlesDetails)) {
267
+ return false;
268
+ }
269
+
270
+ $articlesFeeParameter = new GetArticlesFeeParameter();
271
+
272
+ /* @var $articlesDetail Diglin\Ricardo\Managers\Sell\Parameter\GetArticleFeeParameter */
273
+ foreach ($articlesDetails as $articlesDetail) {
274
+ $articlesFeeParameter->setArticlesDetails($articlesDetail);
275
+ }
276
+
277
+ $this->setCanUseCache(false);
278
+ $fees = parent::getArticlesFee($articlesFeeParameter);
279
+ $this->setCanUseCache(true);
280
+
281
+ return $fees;
282
+ } catch (ExceptionAbstract $e) {
283
+ Mage::logException($e);
284
+ $this->_updateCredentialToken();
285
+ $this->_handleSecurityException($e);
286
+ }
287
+
288
+ return false;
289
+ }
290
  }
app/code/community/Diglin/Ricento/Model/Api/Services/Selleraccount.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Api/Services/System.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Api/Token.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -15,17 +15,19 @@
15
  * @method string getToken()
16
  * @method string getTokenType()
17
  * @method int getWebsiteId()
18
- * @method string getExpirationDate()
19
  * @method int getSessionDuration()
20
- * @method string getSessionExpirationDate()
21
- * @method string getCreatedAt()
22
- * @method string getUpdatedAt()
 
23
  * @method Diglin_Ricento_Model_Api_Token setToken(string $token)
24
  * @method Diglin_Ricento_Model_Api_Token setTokenType(string $tokenType)
25
  * @method Diglin_Ricento_Model_Api_Token setWebsiteId(int $websiteId)
26
  * @method Diglin_Ricento_Model_Api_Token setSessionDuration(int $sessionDuration)
27
  * @method Diglin_Ricento_Model_Api_Token setExpirationDate(string $expirationDate)
28
  * @method Diglin_Ricento_Model_Api_Token setSessionExpirationDate(string $expirationDate)
 
29
  * @method Diglin_Ricento_Model_Api_Token setCreatedAt(string $createdAt)
30
  * @method Diglin_Ricento_Model_Api_Token setUpdatedAt(string $updateAt)
31
  */
@@ -66,7 +68,7 @@ class Diglin_Ricento_Model_Api_Token extends Mage_Core_Model_Abstract
66
  /**
67
  * @param string $tokenType
68
  * @param int $websiteId
69
- * @return $this | Diglin_Ricento_Model_Api_Token
70
  */
71
  public function loadByWebsiteAndTokenType($tokenType = Security::TOKEN_TYPE_IDENTIFIED, $websiteId = 0)
72
  {
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
15
  * @method string getToken()
16
  * @method string getTokenType()
17
  * @method int getWebsiteId()
18
+ * @method string getExpirationDate()
19
  * @method int getSessionDuration()
20
+ * @method string getSessionExpirationDate()
21
+ * @method int getMerchantNotified()
22
+ * @method string getCreatedAt()
23
+ * @method string getUpdatedAt()
24
  * @method Diglin_Ricento_Model_Api_Token setToken(string $token)
25
  * @method Diglin_Ricento_Model_Api_Token setTokenType(string $tokenType)
26
  * @method Diglin_Ricento_Model_Api_Token setWebsiteId(int $websiteId)
27
  * @method Diglin_Ricento_Model_Api_Token setSessionDuration(int $sessionDuration)
28
  * @method Diglin_Ricento_Model_Api_Token setExpirationDate(string $expirationDate)
29
  * @method Diglin_Ricento_Model_Api_Token setSessionExpirationDate(string $expirationDate)
30
+ * @method Diglin_Ricento_Model_Api_Token setMerchantNotified(int $merchantNotified)
31
  * @method Diglin_Ricento_Model_Api_Token setCreatedAt(string $createdAt)
32
  * @method Diglin_Ricento_Model_Api_Token setUpdatedAt(string $updateAt)
33
  */
68
  /**
69
  * @param string $tokenType
70
  * @param int $websiteId
71
+ * @return Diglin_Ricento_Model_Api_Token
72
  */
73
  public function loadByWebsiteAndTokenType($tokenType = Security::TOKEN_TYPE_IDENTIFIED, $websiteId = 0)
74
  {
app/code/community/Diglin/Ricento/Model/Config/Source/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Categories.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Languages.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Products/Listing/Log.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Products/Listing/Status.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Payment.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Availability.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Calculation.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Rules/Shipping/Packages.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Currency.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Days.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Order/Status.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Price/Method.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Price/Source.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Product/Condition.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Product/Condition/Source.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Promotion.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -24,7 +24,7 @@ class Diglin_Ricento_Model_Config_Source_Sales_Promotion extends Diglin_Ricento_
24
  public function toOptionHash()
25
  {
26
  if (empty($this->_promotions) && Mage::helper('diglin_ricento')->isConfigured()) {
27
- $promotions = (array) Mage::getSingleton('diglin_ricento/api_services_system')->getPromotions(
28
  Mage::helper('diglin_ricento')->getJsonDate(), \Diglin\Ricardo\Enums\System\CategoryArticleType::ALL, 1, 1
29
  );
30
 
@@ -34,7 +34,7 @@ class Diglin_Ricento_Model_Config_Source_Sales_Promotion extends Diglin_Ricento_
34
 
35
  $websiteId = 0;
36
  // Listing exists in a context of products listing edition
37
- $listing = Mage::registry('products_listing');
38
  if ($listing->getWebsiteId()) {
39
  $websiteId = $listing->getWebsiteId();
40
  }
@@ -45,7 +45,9 @@ class Diglin_Ricento_Model_Config_Source_Sales_Promotion extends Diglin_Ricento_
45
 
46
  foreach ($promotions as $promotion) {
47
  if ($promotion['GroupId'] == \Diglin\Ricardo\Enums\Article\PromotionCode::PREMIUMCATEGORY) {
48
- $this->_promotions[$promotion['PromotionId']] = $helper->__($promotion['PromotionLabel']) . ' - ' . $helper->formatPrice($promotion['PromotionFee'], $websiteId);
 
 
49
  }
50
  }
51
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
24
  public function toOptionHash()
25
  {
26
  if (empty($this->_promotions) && Mage::helper('diglin_ricento')->isConfigured()) {
27
+ $promotions = (array)Mage::getSingleton('diglin_ricento/api_services_system')->getPromotions(
28
  Mage::helper('diglin_ricento')->getJsonDate(), \Diglin\Ricardo\Enums\System\CategoryArticleType::ALL, 1, 1
29
  );
30
 
34
 
35
  $websiteId = 0;
36
  // Listing exists in a context of products listing edition
37
+ $listing = Mage::registry('products_listing');
38
  if ($listing->getWebsiteId()) {
39
  $websiteId = $listing->getWebsiteId();
40
  }
45
 
46
  foreach ($promotions as $promotion) {
47
  if ($promotion['GroupId'] == \Diglin\Ricardo\Enums\Article\PromotionCode::PREMIUMCATEGORY) {
48
+ $this->_promotions[$promotion['PromotionId']] = $helper->__($promotion['PromotionLabel'])
49
+ . ' - '
50
+ . implode(' / ', $helper->formatDoubleCurrency($promotion['PromotionFee'], $websiteId, Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY));
51
  }
52
  }
53
  }
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Reactivation.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Model_Config_Source_Sales_Reactivation extends Diglin_Ricento_Model_Config_Source_Abstract
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Model_Config_Source_Sales_Reactivation extends Diglin_Ricento_Model_Config_Source_Abstract
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Template.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Type.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sales/Warranty.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Status.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Store.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Progress.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Status.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Config/Source/Sync/Type.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -26,9 +26,8 @@ class Diglin_Ricento_Model_Config_Source_Sync_Type extends Diglin_Ricento_Model_
26
  Diglin_Ricento_Model_Sync_Job::TYPE_LIST => $helper->__('List Job'),
27
  Diglin_Ricento_Model_Sync_Job::TYPE_STOP => $helper->__('Stop List Job'),
28
  Diglin_Ricento_Model_Sync_Job::TYPE_ORDER => $helper->__('Sync Order Job'),
29
- //Diglin_Ricento_Model_Sync_Job::TYPE_RELIST => $helper->__('Relist Job'),
30
- //Diglin_Ricento_Model_Sync_Job::TYPE_UPDATE => $helper->__('Update Job'),
31
- Diglin_Ricento_Model_Sync_Job::TYPE_SYNCLIST => $helper->__('Sync List Job'),
32
  );
33
  }
34
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
26
  Diglin_Ricento_Model_Sync_Job::TYPE_LIST => $helper->__('List Job'),
27
  Diglin_Ricento_Model_Sync_Job::TYPE_STOP => $helper->__('Stop List Job'),
28
  Diglin_Ricento_Model_Sync_Job::TYPE_ORDER => $helper->__('Sync Order Job'),
29
+ // Diglin_Ricento_Model_Sync_Job::TYPE_SYNCLIST => $helper->__('Sync List Job'), // Hide to user
30
+ // Diglin_Ricento_Model_Sync_Job::TYPE_CLOSED => $helper->__('Closed items'), // Hide to user
 
31
  );
32
  }
33
  }
app/code/community/Diglin/Ricento/Model/Config/Source/Website.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Cron.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -15,15 +15,14 @@
15
  class Diglin_Ricento_Model_Cron
16
  {
17
  protected $_syncProcess = array(
18
- //Diglin_Ricento_Model_Sync_Job::TYPE_CHECK_LIST, //** Check list before to sync to ricardo.ch - @deprecated move to Diglin_Ricento_Adminhtml_Products_ListingController to start quickly the check
19
  Diglin_Ricento_Model_Sync_Job::TYPE_LIST, //** List to ricardo.ch
20
  Diglin_Ricento_Model_Sync_Job::TYPE_STOP, //** Stop the list on ricardo.ch if needed
21
- //Diglin_Ricento_Model_Sync_Job::TYPE_RELIST //** Relist to ricardo.ch
22
  );
23
 
24
  protected $_asyncProcess = array(
25
  Diglin_Ricento_Model_Sync_Job::TYPE_SYNCLIST, //** Sync List before getting orders
26
- Diglin_Ricento_Model_Sync_Job::TYPE_ORDER //** Get new orders
 
27
  );
28
 
29
  /**
@@ -31,19 +30,20 @@ class Diglin_Ricento_Model_Cron
31
  */
32
  public function process()
33
  {
34
- if (!Mage::helper('diglin_ricento')->isEnabled()) {
 
35
  return;
36
  }
37
 
38
- ini_set('memory_limit', '512M');
39
-
40
- //** Launch Pending Jobs
41
 
42
- // @todo check that the API token is not expired or that an error may occur, in this case send only once an email to the admin
43
 
44
  try {
45
  foreach ($this->_syncProcess as $jobType) {
46
- $this->dispatch($jobType);
47
  }
48
  } catch (Exception $e) {
49
  Mage::logException($e);
@@ -55,22 +55,25 @@ class Diglin_Ricento_Model_Cron
55
  */
56
  public function async()
57
  {
58
- if (!Mage::helper('diglin_ricento')->isEnabled()) {
 
59
  return;
60
  }
61
 
62
- ini_set('memory_limit', '512M');
 
 
 
 
63
 
64
  try {
65
  foreach ($this->_asyncProcess as $jobType) {
66
- $this->dispatch($jobType);
67
  }
68
  } catch (Exception $e) {
69
  Mage::logException($e);
70
  }
71
 
72
- //** Cleanup
73
-
74
  $this->_processCleanupJobs();
75
  }
76
 
@@ -104,7 +107,7 @@ class Diglin_Ricento_Model_Cron
104
  /**
105
  * @return Diglin_Ricento_Model_Dispatcher
106
  */
107
- protected function _getDisptacher()
108
  {
109
  return Mage::getSingleton('diglin_ricento/dispatcher');
110
  }
@@ -113,8 +116,66 @@ class Diglin_Ricento_Model_Cron
113
  * @param int $type
114
  * @return $this
115
  */
116
- protected function dispatch($type)
117
  {
118
  return $this->_getDisptacher()->dispatch($type)->proceed();
119
  }
120
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
15
  class Diglin_Ricento_Model_Cron
16
  {
17
  protected $_syncProcess = array(
 
18
  Diglin_Ricento_Model_Sync_Job::TYPE_LIST, //** List to ricardo.ch
19
  Diglin_Ricento_Model_Sync_Job::TYPE_STOP, //** Stop the list on ricardo.ch if needed
 
20
  );
21
 
22
  protected $_asyncProcess = array(
23
  Diglin_Ricento_Model_Sync_Job::TYPE_SYNCLIST, //** Sync List before getting orders
24
+ Diglin_Ricento_Model_Sync_Job::TYPE_ORDER, //** Get new orders
25
+ Diglin_Ricento_Model_Sync_Job::TYPE_CLOSED //** Close articles which are not anymore open
26
  );
27
 
28
  /**
30
  */
31
  public function process()
32
  {
33
+ $helper = Mage::helper('diglin_ricento');
34
+ if (!$helper->isEnabled() || $this->_isTokenExpired()) {
35
  return;
36
  }
37
 
38
+ if ($helper->getMemoryLimit() > 0 && $helper->getMemoryLimit() < 512) {
39
+ ini_set('memory_limit', '512M');
40
+ }
41
 
42
+ register_shutdown_function(array($this, 'handleError'));
43
 
44
  try {
45
  foreach ($this->_syncProcess as $jobType) {
46
+ $this->_dispatch($jobType);
47
  }
48
  } catch (Exception $e) {
49
  Mage::logException($e);
55
  */
56
  public function async()
57
  {
58
+ $helper = Mage::helper('diglin_ricento');
59
+ if (!$helper->isEnabled() || $this->_isTokenExpired()) {
60
  return;
61
  }
62
 
63
+ if ($helper->getMemoryLimit() > 0 && $helper->getMemoryLimit() < 512) {
64
+ ini_set('memory_limit', '512M');
65
+ }
66
+
67
+ register_shutdown_function(array($this, 'handleError'));
68
 
69
  try {
70
  foreach ($this->_asyncProcess as $jobType) {
71
+ $this->_dispatch($jobType);
72
  }
73
  } catch (Exception $e) {
74
  Mage::logException($e);
75
  }
76
 
 
 
77
  $this->_processCleanupJobs();
78
  }
79
 
107
  /**
108
  * @return Diglin_Ricento_Model_Dispatcher
109
  */
110
+ private function _getDisptacher()
111
  {
112
  return Mage::getSingleton('diglin_ricento/dispatcher');
113
  }
116
  * @param int $type
117
  * @return $this
118
  */
119
+ private function _dispatch($type)
120
  {
121
  return $this->_getDisptacher()->dispatch($type)->proceed();
122
  }
123
+
124
+ /**
125
+ * @return bool
126
+ */
127
+ private function _isTokenExpired()
128
+ {
129
+ $helper = Mage::helper('diglin_ricento/api');
130
+
131
+ // @todo in case of real multi website support, add website parameter
132
+
133
+ if ($helper->apiTokenCredentialValidation() && !$helper->isMerchantNotifiedApiAuthorization()) {
134
+ $helperTools = Mage::helper('diglin_ricento/tools');
135
+ $helperTools->sendMerchantAuthorizationNotification(array(
136
+ 'shop_url' => Mage::helper('adminhtml')->getUrl('adminhtml')
137
+ ));
138
+
139
+ /* @var $token Diglin_Ricento_Model_Api_Token */
140
+ $token = Mage::getModel('diglin_ricento/api_token')
141
+ ->loadByWebsiteAndTokenType(Diglin\Ricardo\Services\Security::TOKEN_TYPE_IDENTIFIED, Mage::app()->getWebsite()->getId());
142
+
143
+ if ($token->getId()) {
144
+ $token
145
+ ->setMerchantNotified(1)
146
+ ->save();
147
+ }
148
+ }
149
+
150
+ if ($helper->apiExpired()) {
151
+ return true;
152
+ }
153
+
154
+ return false;
155
+ }
156
+
157
+ /**
158
+ * Handle Error in case of "ghosts" PHP error
159
+ *
160
+ * @return $this
161
+ */
162
+ public function handleError()
163
+ {
164
+ $error = error_get_last();
165
+
166
+ if( $error !== NULL) {
167
+ if (function_exists('mageDebugBacktrace')) {
168
+ $error = array_merge($error, (array) mageDebugBacktrace(false, false));
169
+ }
170
+
171
+ // $errno = $error["type"];
172
+ // $errfile = $error["file"];
173
+ // $errline = $error["line"];
174
+ // $errstr = $error["message"];
175
+
176
+ Mage::log(print_r($error, true), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
177
+ }
178
+
179
+ return $this;
180
+ }
181
+ }
app/code/community/Diglin/Ricento/Model/Dispatcher.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Dispatcher/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -96,6 +96,11 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
96
  */
97
  protected $_totalError = 0;
98
 
 
 
 
 
 
99
  /**
100
  * @return $this
101
  */
@@ -160,7 +165,8 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
160
  $itemCollection
161
  ->addFieldToFilter('status', array('in' => $statuses))
162
  ->addFieldToFilter('products_listing_id', array('eq' => $this->_productsListingId))
163
- ->addFieldToFilter('item_id', array('gt' => (int) $lastItemId));
 
164
 
165
  if ($this->_limit) {
166
  $itemCollection->setPageSize($this->_limit);
@@ -192,6 +198,8 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
192
  $this->_currentJobListing = Mage::getModel('diglin_ricento/sync_job_listing')->load($this->_currentJob->getId(), 'job_id');
193
  $this->_productsListingId = (int) $this->_currentJobListing->getProductsListingId();
194
  $this->_totalProceed = (int) $this->_currentJobListing->getTotalProceed();
 
 
195
 
196
  if (!$this->_productsListingId) {
197
  return $this;
@@ -219,7 +227,7 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
219
  $end = microtime(true);
220
 
221
  if ($helper->isDebugEnabled()) {
222
- Mage::log('Time to run the job id ' . $this->_currentJob->getId() . ' in ' . ($end - $start) . ' sec', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE);
223
  }
224
 
225
  if ($this->_jobHasError || $this->_currentJob->getJobStatus() == Diglin_Ricento_Model_Sync_Job::STATUS_ERROR) {
@@ -244,6 +252,8 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
244
 
245
  $this->_currentJobListing
246
  ->setLastItemId(null)
 
 
247
  ->setTotalProceed($this->_totalProceed)
248
  ->save();
249
 
@@ -286,7 +296,7 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
286
  $this->_jobHasWarning = false;
287
  }
288
  } catch (Exception $e) {
289
- Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE);
290
  $this->_currentJob = (isset($this->_currentJob)) ? $this->_currentJob : null;
291
  $this->_setJobError($e);
292
  }
@@ -400,10 +410,10 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
400
  */
401
  protected function _handleException(Exception $e, $lastService = null)
402
  {
403
- Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE);
404
 
405
  if ($lastService instanceof Diglin_Ricento_Model_Api_Services_Abstract) {
406
- Mage::log($lastService->getLastApiDebug(), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE);
407
  }
408
 
409
  $message = $this->_getHelper()->__($e->getMessage());
@@ -420,6 +430,26 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
420
  return $this;
421
  }
422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  /**
424
  * @param int $productsListingId
425
  * @return $this
@@ -476,4 +506,16 @@ abstract class Diglin_Ricento_Model_Dispatcher_Abstract
476
  ->setCanUseCache(false)
477
  ->setCurrentWebsite($this->_getListing()->getWebsiteId());
478
  }
 
 
 
 
 
 
 
 
 
 
 
 
479
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
96
  */
97
  protected $_totalError = 0;
98
 
99
+ /**
100
+ * @var null | Mage_Directory_Model_Currency
101
+ */
102
+ protected $_currency = null;
103
+
104
  /**
105
  * @return $this
106
  */
165
  $itemCollection
166
  ->addFieldToFilter('status', array('in' => $statuses))
167
  ->addFieldToFilter('products_listing_id', array('eq' => $this->_productsListingId))
168
+ ->addFieldToFilter('item_id', array('gt' => (int) $lastItemId))
169
+ ->addFieldToFilter('type', array('nin' => Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE));
170
 
171
  if ($this->_limit) {
172
  $itemCollection->setPageSize($this->_limit);
198
  $this->_currentJobListing = Mage::getModel('diglin_ricento/sync_job_listing')->load($this->_currentJob->getId(), 'job_id');
199
  $this->_productsListingId = (int) $this->_currentJobListing->getProductsListingId();
200
  $this->_totalProceed = (int) $this->_currentJobListing->getTotalProceed();
201
+ $this->_totalSuccess = (int) $this->_currentJobListing->getTotalSuccess();
202
+ $this->_totalError = (int) $this->_currentJobListing->getTotalError();
203
 
204
  if (!$this->_productsListingId) {
205
  return $this;
227
  $end = microtime(true);
228
 
229
  if ($helper->isDebugEnabled()) {
230
+ Mage::log('Time to run the job id ' . $this->_currentJob->getId() . ' in ' . ($end - $start) . ' sec', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
231
  }
232
 
233
  if ($this->_jobHasError || $this->_currentJob->getJobStatus() == Diglin_Ricento_Model_Sync_Job::STATUS_ERROR) {
252
 
253
  $this->_currentJobListing
254
  ->setLastItemId(null)
255
+ ->setTotalError($this->_totalError)
256
+ ->setTotalSuccess($this->_totalSuccess)
257
  ->setTotalProceed($this->_totalProceed)
258
  ->save();
259
 
296
  $this->_jobHasWarning = false;
297
  }
298
  } catch (Exception $e) {
299
+ Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
300
  $this->_currentJob = (isset($this->_currentJob)) ? $this->_currentJob : null;
301
  $this->_setJobError($e);
302
  }
410
  */
411
  protected function _handleException(Exception $e, $lastService = null)
412
  {
413
+ Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
414
 
415
  if ($lastService instanceof Diglin_Ricento_Model_Api_Services_Abstract) {
416
+ Mage::log($lastService->getLastApiDebug(), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
417
  }
418
 
419
  $message = $this->_getHelper()->__($e->getMessage());
430
  return $this;
431
  }
432
 
433
+ /**
434
+ * @param $errorType
435
+ * @param array $errorCodes
436
+ * @return array
437
+ */
438
+ protected function _handleErrorCodes($errorType, array $errorCodes)
439
+ {
440
+ $labels = array();
441
+
442
+ /* @var $classname Diglin\Ricardo\Enums\AbstractEnums */
443
+ $classname = '\Diglin\Ricardo\Enums\\' . $errorType;
444
+ if (class_exists($classname)) {
445
+ foreach ($errorCodes as $errorCode) {
446
+ $labels[] = $classname::getLabel($errorCode);
447
+ }
448
+ }
449
+
450
+ return $labels;
451
+ }
452
+
453
  /**
454
  * @param int $productsListingId
455
  * @return $this
506
  ->setCanUseCache(false)
507
  ->setCurrentWebsite($this->_getListing()->getWebsiteId());
508
  }
509
+
510
+ /**
511
+ * @return Mage_Directory_Model_Currency
512
+ */
513
+ protected function _getCurrency()
514
+ {
515
+ if (!$this->_currency) {
516
+ $this->_currency = Mage::getModel('directory/currency')->load(Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
517
+ }
518
+
519
+ return $this->_currency;
520
+ }
521
  }
app/code/community/Diglin/Ricento/Model/Dispatcher/Check/List.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -161,13 +161,7 @@ class Diglin_Ricento_Model_Dispatcher_Check_List extends Diglin_Ricento_Model_Di
161
  */
162
  protected function _proceedAfter()
163
  {
164
- // Ready to list the product automatically which are ready for that
165
-
166
- /**
167
- * Prepare products listing item for configurable products
168
- */
169
- $this->_prepareConfigurableProduct();
170
-
171
  if ($this->_jobHasSuccess && $this->_progressStatus == Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED) {
172
 
173
  $countReadyItems = Mage::getResourceModel('diglin_ricento/products_listing_item')->coundReadyTolist($this->_productsListingId);
@@ -194,119 +188,6 @@ class Diglin_Ricento_Model_Dispatcher_Check_List extends Diglin_Ricento_Model_Di
194
  return $this;
195
  }
196
 
197
- /**
198
- * Create products listing items for configurable product
199
- *
200
- * @return $this
201
- */
202
- protected function _prepareConfigurableProduct()
203
- {
204
- /**
205
- * Get children products of configurable product
206
- */
207
- $collectionListingItemBis = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
208
- $collectionListingItemBis
209
- ->addFieldToFilter('parent_product_id', array('notnull' => 1))
210
- ->addFieldToFilter('status', Diglin_Ricento_Helper_Data::STATUS_READY)
211
- ->addFieldToFilter('products_listing_id', $this->_productsListingId)
212
- ->getSelect()
213
- ->group('parent_product_id');
214
-
215
- $parentProductIds = $collectionListingItemBis->getColumnValues('parent_product_id');
216
-
217
- /**
218
- * Get the list of configurable products
219
- */
220
- $collectionListingItem = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
221
- $collectionListingItem
222
- ->addFieldToFilter('products_listing_id', $this->_productsListingId)
223
- ->addFieldToFilter('status', Diglin_Ricento_Helper_Data::STATUS_READY)
224
- ->getConfigurableProducts();
225
-
226
- if (count($parentProductIds)) {
227
- $collectionListingItem->addFieldToFilter('product_id', array('nin' => $parentProductIds));
228
- }
229
-
230
- /**
231
- * Get all products of configurable products for a list
232
- *
233
- * @var $item Diglin_Ricento_Model_Products_Listing_Item
234
- */
235
- foreach ($collectionListingItem->getItems() as $item)
236
- {
237
- /**
238
- * Get all children products
239
- */
240
- $collection = Mage::getResourceModel('catalog/product_collection')
241
- ->addAttributeToSelect('sku')
242
- ->addFilterByRequiredOptions()
243
- ->addFieldToFilter('entity_id', array('in' => $item->getProduct()->getUsedProductIds()));
244
-
245
- $attributes = $item->getProduct()->getConfigurableAttributes();
246
-
247
- foreach ($attributes as $attribute) {
248
- $collection->addAttributeToSelect($attribute->getProductAttribute()->getAttributeCode());
249
- $collection->addAttributeToFilter($attribute->getProductAttribute()->getAttributeCode(), array('notnull' => 1));
250
- }
251
-
252
- foreach ($collection->getItems() as $childProduct) {
253
-
254
- $configurableChild = array();
255
-
256
- foreach ($attributes as $attribute) {
257
-
258
- $productAttribute = $attribute->getProductAttribute();
259
- $attributeValueId = $childProduct->getData($productAttribute->getAttributeCode());
260
- if ($attributeValueId) {
261
-
262
- $priceVariation = array();
263
- $subtitle = $productAttribute->getFrontendLabel() . ': ';
264
-
265
- /**
266
- * Get price variation
267
- */
268
- $prices = $attribute->getData('prices');
269
- foreach ($prices as $price) {
270
- if ($price['pricing_value'] != 0 && $price['value_index'] == $attributeValueId) {
271
- $priceVariation = array('pricing_value' => $price['pricing_value'], 'is_percent' => $price['is_percent']);
272
- break;
273
- }
274
- }
275
-
276
- /**
277
- * Get attribute label to be used as subtitle
278
- */
279
- foreach ($productAttribute->getSource()->getAllOptions() as $option) {
280
- if ($attributeValueId == $option['value']) {
281
- $subtitle .= $option['label'];
282
- }
283
- }
284
-
285
- $configurableChild['options'][$attributeValueId] = array_merge(array('subtitle' => $subtitle), $priceVariation);
286
- }
287
- }
288
-
289
- $configurableChild['stock_qty'] = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProduct->getId())->getQty();
290
-
291
- /**
292
- * Save as new products listing item
293
- */
294
- $itemChild = clone $item;
295
- $itemChild
296
- ->setId(null)
297
- ->setCreatedAt(Mage::getSingleton('core/date')->gmtDate())
298
- ->setUpdatedAt(null)
299
- ->setProductId($childProduct->getId())
300
- ->setAdditionalData(Mage::helper('core')->jsonEncode($configurableChild))
301
- ->setParentItemId($item->getId())
302
- ->setParentProductId($item->getProductId())
303
- ->save();
304
- }
305
- }
306
-
307
- return $this;
308
- }
309
-
310
  /**
311
  * @param string $jobStatus
312
  * @return string
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
161
  */
162
  protected function _proceedAfter()
163
  {
164
+ // List the product automatically which are ready for that
 
 
 
 
 
 
165
  if ($this->_jobHasSuccess && $this->_progressStatus == Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED) {
166
 
167
  $countReadyItems = Mage::getResourceModel('diglin_ricento/products_listing_item')->coundReadyTolist($this->_productsListingId);
188
  return $this;
189
  }
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  /**
192
  * @param string $jobStatus
193
  * @return string
app/code/community/Diglin/Ricento/Model/Dispatcher/Closed.php ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <sylvain.raye at diglin.com>
6
+ * @category Ricento
7
+ * @package Ricento
8
+ * @copyright Copyright (c) 2011-2014 Diglin (http://www.diglin.com)
9
+ */
10
+
11
+ use \Diglin\Ricardo\Managers\SellerAccount\Parameter\OpenArticlesParameter;
12
+
13
+ /**
14
+ * Class Diglin_Ricento_Model_Dispatcher_Closed
15
+ */
16
+ class Diglin_Ricento_Model_Dispatcher_Closed extends Diglin_Ricento_Model_Dispatcher_Abstract
17
+ {
18
+ /**
19
+ * @var int
20
+ */
21
+ protected $_logType = Diglin_Ricento_Model_Products_Listing_Log::LOG_TYPE_CLOSED;
22
+
23
+ /**
24
+ * @var string
25
+ */
26
+ protected $_jobType = Diglin_Ricento_Model_Sync_Job::TYPE_CLOSED;
27
+
28
+ /**
29
+ * @var array
30
+ */
31
+ protected $_stoppedRicardoArticleIds = array();
32
+
33
+ public function proceed()
34
+ {
35
+ $plResource = Mage::getResourceModel('diglin_ricento/products_listing');
36
+ $readConnection = $plResource->getReadConnection();
37
+ $select = $readConnection
38
+ ->select()
39
+ ->from($plResource->getTable('diglin_ricento/products_listing'), 'entity_id');
40
+
41
+ $listingIds = $readConnection->fetchCol($select);
42
+
43
+ foreach ($listingIds as $listingId) {
44
+ $select = $readConnection
45
+ ->select()
46
+ ->from(array('pli' => $plResource->getTable('diglin_ricento/products_listing_item')), 'item_id')
47
+ ->where('type <> ?', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
48
+ ->where('products_listing_id = :id AND status = :status AND is_planned = 0');
49
+
50
+ $binds = array('id' => $listingId, 'status' => Diglin_Ricento_Helper_Data::STATUS_LISTED);
51
+ $countListedItems = count($readConnection->fetchAll($select, $binds));
52
+
53
+ if ($countListedItems == 0) {
54
+ continue;
55
+ }
56
+
57
+ /**
58
+ * Check that there is not already running job instead of creating a new one
59
+ */
60
+ Mage::getResourceModel('diglin_ricento/sync_job')->cleanupPendingJob($this->_jobType, $listingId);
61
+
62
+ // pending progress doesn't make sense here as we cleanup before but keep it to be sure everything ok
63
+ $job = Mage::getModel('diglin_ricento/sync_job');
64
+ $job->loadByTypeListingIdProgress($this->_jobType, $listingId, array(
65
+ Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING,
66
+ Diglin_Ricento_Model_Sync_Job::PROGRESS_CHUNK_RUNNING
67
+ ));
68
+
69
+ if ($job->getId()) {
70
+ continue;
71
+ }
72
+
73
+ $job
74
+ ->setJobType($this->_jobType)
75
+ ->setProgress(Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING)
76
+ ->setJobMessage(array($job->getJobMessage(true)))
77
+ ->save();
78
+
79
+ $jobListing = Mage::getModel('diglin_ricento/sync_job_listing');
80
+ $jobListing
81
+ ->setProductsListingId($listingId)
82
+ ->setTotalCount($countListedItems)
83
+ ->setTotalProceed(0)
84
+ ->setJobId($job->getId())
85
+ ->save();
86
+ }
87
+
88
+ unset($listingIds);
89
+ unset($readConnection);
90
+ unset($job);
91
+ unset($jobListing);
92
+
93
+ return parent::proceed();
94
+ }
95
+
96
+ /**
97
+ * @return mixed
98
+ */
99
+ protected function _proceed()
100
+ {
101
+ /**
102
+ * Status of the collection must be the same as Diglin_Ricento_Model_Resource_Products_Listing_Item::countReadyTolist
103
+ */
104
+ $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_LISTED), $this->_currentJobListing->getLastItemId());
105
+ $itemCollection->addFieldToFilter('is_planned', 0);
106
+ $totalItems = $itemCollection->getSize();
107
+ $ricardoArticleIds = $itemCollection->getColumnValues('ricardo_article_id');
108
+ $lastItem = $itemCollection->getLastItem();
109
+ $soldArticlesResult = $stoppedArticles = array();
110
+
111
+ if (!$totalItems) {
112
+ $this->_currentJob->setJobMessage(array($this->_getNoItemMessage()));
113
+ $this->_progressStatus = Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED;
114
+ return $this;
115
+ }
116
+
117
+ $openArticlesParameter = new OpenArticlesParameter();
118
+ $openArticlesParameter
119
+ ->setPageSize($this->_limit) // if not defined, default is 10
120
+ ->setArticleIdsFilter($ricardoArticleIds);
121
+
122
+ $sellerAccountService = Mage::getSingleton('diglin_ricento/api_services_selleraccount')->setCanUseCache(false);
123
+ $sellerAccountService->setCurrentWebsite($this->_getListing()->getWebsiteId());
124
+
125
+ try {
126
+ $soldArticlesResult = $sellerAccountService->getOpenArticles($openArticlesParameter);
127
+ } catch (Exception $e) {
128
+ $this->_handleException($e);
129
+ $e = null;
130
+ // keep going for the next item - no break
131
+ }
132
+
133
+ if (isset($soldArticlesResult['OpenArticles'])) {
134
+ $this->_stoppedRicardoArticleIds = $soldArticlesResult['OpenArticles'];
135
+ $stoppedArticles = array_filter($ricardoArticleIds, array($this, 'pullArticleToClose'));
136
+ if (count($stoppedArticles)) {
137
+ $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
138
+ $itemCollection->addFieldToFilter('ricardo_article_id', array('in' => $stoppedArticles));
139
+
140
+ foreach ($itemCollection->getItems() as $item) {
141
+
142
+ $item
143
+ ->setStatus(Diglin_Ricento_Helper_Data::STATUS_STOPPED)
144
+ ->save();
145
+
146
+ $this->_getListingLog()->saveLog(array(
147
+ 'job_id' => $this->_currentJob->getId(),
148
+ 'product_id' => $item->getProductId(),
149
+ 'product_title' => $item->getProductTitle(),
150
+ 'products_listing_id' => $this->_productsListingId,
151
+ 'message' => $this->_jsonEncode(array('success' => $this->_getHelper()->__('The product has been stopped'))),
152
+ 'log_status' => Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS,
153
+ 'log_type' => $this->_logType,
154
+ 'created_at' => Mage::getSingleton('core/date')->gmtDate()
155
+ ));
156
+ }
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Save the current information of the process to allow live display via ajax call
162
+ */
163
+ $this->_totalProceed = $totalItems;
164
+ $this->_currentJobListing->saveCurrentJob(array(
165
+ 'total_proceed' => $this->_totalProceed,
166
+ 'last_item_id' => $lastItem->getId()
167
+ ));
168
+
169
+ /**
170
+ * Stop the list if all products listing items are stopped
171
+ */
172
+ if ($this->_productsListingId) {
173
+ $listResource = Mage::getResourceModel('diglin_ricento/products_listing');
174
+ $listResource->setStatusStop($this->_productsListingId);
175
+ }
176
+
177
+ unset($itemCollection);
178
+
179
+ return $this;
180
+ }
181
+
182
+ /**
183
+ * @param $var
184
+ * @return bool
185
+ */
186
+ public function pullArticleToClose($var)
187
+ {
188
+ $return = true;
189
+ foreach ($this->_stoppedRicardoArticleIds as $articleId) {
190
+ if ($var == $articleId['ArticleId']) {
191
+ return false;
192
+ }
193
+ }
194
+ return $return;
195
+ }
196
+ }
app/code/community/Diglin/Ricento/Model/Dispatcher/List.php CHANGED
@@ -5,10 +5,12 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
 
 
12
  /**
13
  * Class Diglin_Ricento_Model_Dispatcher_List
14
  */
@@ -30,20 +32,23 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
30
  protected function _proceed()
31
  {
32
  $job = $this->_currentJob;
33
- $jobListing = $this->_currentJobListing;
34
 
35
  $sell = Mage::getSingleton('diglin_ricento/api_services_sell');
36
  $sell->setCurrentWebsite($this->_getListing()->getWebsiteId());
37
 
38
- $insertedArticle = null;
39
- $hasSuccess = false;
 
 
 
40
 
41
  /**
42
- * Status of the collection must be the same as Diglin_Ricento_Model_Resource_Products_Listing_Item::coundReadyTolist
43
  */
44
- $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_READY), $jobListing->getLastItemId());
 
45
 
46
- if ($itemCollection->count() == 0) {
47
  $job->setJobMessage(array($this->_getNoItemMessage()));
48
  $this->_progressStatus = Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED;
49
  return $this;
@@ -52,60 +57,122 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
52
  /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
53
  foreach ($itemCollection->getItems() as $item) {
54
 
55
- try {
56
- $articleId = null;
57
- $isPlanned = false;
 
 
 
 
 
58
 
59
- // We skip insert article with configurable product as we push its associated products
60
- if ($item->getProduct()->isConfigurableType()) {
61
- $jobListing->saveCurrentJob(array(
62
- 'total_proceed' => ++$this->_totalProceed,
63
- 'last_item_id' => $item->getId()
64
- ));
65
- continue;
66
- }
67
 
68
- if (!$item->getRicardoArticleId()) {
69
- $insertedArticle = $sell->insertArticle($item);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
 
72
- if (!empty($insertedArticle['PlannedArticleId'])) {
73
- $articleId = $insertedArticle['PlannedArticleId'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  $isPlanned = true;
75
- } else if (!empty($insertedArticle['ArticleId'])) {
76
- $articleId = $insertedArticle['ArticleId'];
77
  $isPlanned = false;
78
  }
 
79
 
80
- if (!empty($articleId)) {
81
- // Must be set at first in case of error
82
- $item->getResource()->saveCurrentItem($item->getId(), array(
83
- 'ricardo_article_id' => $articleId,
84
- 'status' => Diglin_Ricento_Helper_Data::STATUS_LISTED,
85
- 'is_planned' => (int) $isPlanned,
86
- 'qty_inventory' => $item->getProductQty()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  ));
88
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
89
- $this->_itemMessage = array('inserted_article' => $insertedArticle);
90
- $hasSuccess = true;
91
- $this->_jobHasSuccess = true;
92
- ++$this->_totalSuccess;
93
- } else if ($item->getRicardoArticleId()) {
94
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_NOTICE;
95
- $this->_itemMessage = array('notice' => $this->_getHelper()->__('This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch'));
96
- $this->_jobHasSuccess = true;
97
- ++$this->_totalSuccess;
98
- // no change needed for the item status
99
- } else {
100
- ++$this->_totalError;
101
- $this->_jobHasError = true;
102
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_ERROR;
103
- $item->getResource()->saveCurrentItem($item->getId(), array('status' => Diglin_Ricento_Helper_Data::STATUS_ERROR));
104
  }
105
- } catch (Exception $e) {
106
- $this->_handleException($e, $sell);
107
- $e = null;
108
- // keep going for the next item - no break
109
  }
110
 
111
  /**
@@ -113,9 +180,9 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
113
  */
114
  $this->_getListingLog()->saveLog(array(
115
  'job_id' => $job->getId(),
116
- 'product_title' => $item->getProductTitle(),
117
  'products_listing_id' => $this->_productsListingId,
118
- 'product_id' => $item->getProductId(),
119
  'message' => (is_array($this->_itemMessage)) ? $this->_jsonEncode($this->_itemMessage) : $this->_itemMessage,
120
  'log_status' => $this->_itemStatus,
121
  'log_type' => $this->_logType,
@@ -125,11 +192,11 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
125
  /**
126
  * Save the current information of the process to allow live display via ajax call
127
  */
128
- $jobListing->saveCurrentJob(array(
129
  'total_proceed' => ++$this->_totalProceed,
130
- 'total_success' => $this->_totalSuccess, //@todo update with the previous total_success in case of chunk_running
131
- 'total_error' => $this->_totalError,//@todo update with the previous total_success in case of chunk_running
132
- 'last_item_id' => $item->getId()
133
  ));
134
 
135
  $this->_itemMessage = null;
@@ -138,13 +205,13 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
138
 
139
  if ($hasSuccess) {
140
  $listing = Mage::getModel('diglin_ricento/products_listing')->load($this->_productsListingId);
141
- $listing
142
- ->setStatus(Diglin_Ricento_Helper_Data::STATUS_LISTED)
143
- ->save();
 
 
144
  }
145
 
146
- unset($itemCollection);
147
-
148
  return $this;
149
  }
150
 
@@ -156,37 +223,4 @@ class Diglin_Ricento_Model_Dispatcher_List extends Diglin_Ricento_Model_Dispatch
156
  {
157
  return Mage::helper('diglin_ricento')->__('Report: %d success, %d error(s)', $this->_totalSuccess, $this->_totalError);
158
  }
159
-
160
- /**
161
- * @return $this
162
- */
163
- // protected function _proceedAfter()
164
- // {
165
- // /**
166
- // * Get the children of product listing item to set the correct status of the parent
167
- // */
168
- // $itemCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
169
- // $itemCollection
170
- // ->addFieldToFilter('status', array('in' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
171
- // ->addFieldToFilter('parent_item_id', array('notnull' => 1))
172
- // ->addFieldToFilter('products_listing_id', array('eq' => $this->_productsListingId))
173
- // ->getSelect()->group('parent_item_id');
174
- //
175
- // $hash = array();
176
- // foreach ($itemCollection->getItems() as $item) {
177
- // if (empty($hash[$item->getParentItemId()])) {
178
- // Mage::getModel('diglin_ricento/products_listing_item')
179
- // ->load($item->getParentItemId())
180
- // ->setStatus(Diglin_Ricento_Helper_Data::STATUS_LISTED)
181
- // ->save();
182
- //
183
- // $hash[$item->getParentItemId()] = true;
184
- // }
185
- // }
186
- //
187
- // unset($itemCollection);
188
- // unset($hash);
189
- //
190
- // return parent::_proceedAfter();
191
- // }
192
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
+ use \Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
13
+
14
  /**
15
  * Class Diglin_Ricento_Model_Dispatcher_List
16
  */
32
  protected function _proceed()
33
  {
34
  $job = $this->_currentJob;
 
35
 
36
  $sell = Mage::getSingleton('diglin_ricento/api_services_sell');
37
  $sell->setCurrentWebsite($this->_getListing()->getWebsiteId());
38
 
39
+ $i = 1;
40
+ $flush = false;
41
+ $totalBulkToInsert = 5; // to limit memory usage
42
+ $correlationItems = array();
43
+ $insertArticles = new InsertArticlesParameter();
44
 
45
  /**
46
+ * Status of the collection must be the same as Diglin_Ricento_Model_Resource_Products_Listing_Item::countReadyTolist
47
  */
48
+ $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_READY), $this->_currentJobListing->getLastItemId());
49
+ $totalItems = $itemCollection->getSize();
50
 
51
+ if (!$totalItems) {
52
  $job->setJobMessage(array($this->_getNoItemMessage()));
53
  $this->_progressStatus = Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED;
54
  return $this;
57
  /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
58
  foreach ($itemCollection->getItems() as $item) {
59
 
60
+ $baseInsert = $item->getBaseInsertArticleWithTracking();
61
+ $correlationItems[$baseInsert->getCorrelationKey()] = array(
62
+ 'item_id' => $item->getId(),
63
+ 'product_title' => $item->getProductTitle(),
64
+ 'product_id' => $item->getProductId(),
65
+ 'product_qty' => $item->getProductQty(),
66
+ 'skipped' => (bool) ($item->getRicardoArticleId())
67
+ );
68
 
69
+ if (!$item->getRicardoArticleId()) {
70
+ $insertArticles->setArticles($baseInsert, $flush);
71
+ }
 
 
 
 
 
72
 
73
+ $flush = false;
74
+ $totalItems--;
75
+
76
+ if ($i == $totalBulkToInsert || !$totalItems) {
77
+ try {
78
+ $insertedArticleResult = $sell->insertArticles($insertArticles);
79
+ $flush = true;
80
+ $i = 1;
81
+
82
+ foreach ($insertedArticleResult as $insertedArticle) {
83
+ if (isset($insertedArticle['CorrelationKey'])) {
84
+ $correlationItems[$insertedArticle['CorrelationKey']] += $insertedArticle;
85
+ }
86
+ }
87
+ } catch (Exception $e) {
88
+ Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
89
+ Mage::log($sell->getLastApiDebug(), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
90
+
91
+ $message = $this->_getHelper()->__($e->getMessage());
92
+ $message = function_exists('mb_strcut') ? mb_strcut($message, 0, 1024 * 1024) : substr($message, 0, 1024 * 1024);
93
+
94
+ foreach ($correlationItems as $key => $correlationItem) {
95
+ $correlationItems[$key]['ErrorCodes'] = $e->getCode();
96
+ $correlationItems[$key]['ErrorMessage'] = $message;
97
+ }
98
+
99
+ $e = null;
100
+ // keep going for the next items - no break
101
  }
102
 
103
+ $this->_saveCurrentStatus($correlationItems);
104
+ $correlationItems = array();
105
+ }
106
+ $i++;
107
+ }
108
+
109
+ if (Mage::helper('diglin_ricento')->isDebugEnabled()) {
110
+ Mage::log('Max Memory Usage After Total Insert ' . $this->_getHelper()->getMemoryUsage() . ' bytes', Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
111
+ }
112
+
113
+ unset($insertArticles);
114
+ unset($itemCollection);
115
+
116
+ return $this;
117
+ }
118
+
119
+ /**
120
+ * @param array $correlationItems
121
+ * @return $this
122
+ * @throws Exception
123
+ */
124
+ protected function _saveCurrentStatus(array $correlationItems)
125
+ {
126
+ $hasSuccess = false;
127
+ $job = $this->_currentJob;
128
+ $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
129
+
130
+ foreach ($correlationItems as $correlationItem) {
131
+ $articleId = null;
132
+ $isPlanned = false;
133
+
134
+ if (!$correlationItem['skipped']) {
135
+ if (!empty($correlationItem['PlannedArticleId'])) {
136
+ $articleId = $correlationItem['PlannedArticleId'];
137
  $isPlanned = true;
138
+ } else if (!empty($correlationItem['ArticleId'])) {
139
+ $articleId = $correlationItem['ArticleId'];
140
  $isPlanned = false;
141
  }
142
+ }
143
 
144
+ if (!empty($articleId)) {
145
+ // Must be set at first in case of error
146
+ $itemResource->saveCurrentItem($correlationItem['item_id'], array(
147
+ 'ricardo_article_id' => $articleId,
148
+ 'status' => Diglin_Ricento_Helper_Data::STATUS_LISTED,
149
+ 'is_planned' => (int) $isPlanned,
150
+ 'qty_inventory' => $correlationItem['product_qty']
151
+ ));
152
+ $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
153
+ $this->_itemMessage = array('inserted_article' => $correlationItem);
154
+ $hasSuccess = true;
155
+ $this->_jobHasSuccess = true;
156
+ ++$this->_totalSuccess;
157
+ } else if ($correlationItem['skipped']) {
158
+ $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_NOTICE;
159
+ $this->_itemMessage = array('notice' => $this->_getHelper()->__('This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch'));
160
+ $this->_jobHasSuccess = true;
161
+ ++$this->_totalSuccess;
162
+ // no change needed for the item status
163
+ } else {
164
+ ++$this->_totalError;
165
+ $this->_jobHasError = true;
166
+ if (isset($correlationItem['ErrorMessage']) || $correlationItem['ErrorCodes']) {
167
+ $this->_itemMessage = array('errors' => array(
168
+ $this->_getHelper()->__('Error Code: %d', (isset($correlationItem['ErrorCodes'])) ? implode(',', $correlationItem['ErrorCodes']) : ''),
169
+ (isset($correlationItem['ErrorMessage']))
170
+ ? $this->_getHelper()->__($correlationItem['ErrorMessage'])
171
+ : implode(' - ', $this->_handleErrorCodes($correlationItem['ErrorCodesType'], $correlationItem['ErrorCodes']))
172
  ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  }
174
+ $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_ERROR;
175
+ $itemResource->saveCurrentItem($correlationItem['item_id'], array('status' => Diglin_Ricento_Helper_Data::STATUS_ERROR));
 
 
176
  }
177
 
178
  /**
180
  */
181
  $this->_getListingLog()->saveLog(array(
182
  'job_id' => $job->getId(),
183
+ 'product_title' => $correlationItem['product_title'],
184
  'products_listing_id' => $this->_productsListingId,
185
+ 'product_id' => $correlationItem['product_id'],
186
  'message' => (is_array($this->_itemMessage)) ? $this->_jsonEncode($this->_itemMessage) : $this->_itemMessage,
187
  'log_status' => $this->_itemStatus,
188
  'log_type' => $this->_logType,
192
  /**
193
  * Save the current information of the process to allow live display via ajax call
194
  */
195
+ $this->_currentJobListing->saveCurrentJob(array(
196
  'total_proceed' => ++$this->_totalProceed,
197
+ 'total_success' => $this->_totalSuccess,
198
+ 'total_error' => $this->_totalError,
199
+ 'last_item_id' => $correlationItem['item_id']
200
  ));
201
 
202
  $this->_itemMessage = null;
205
 
206
  if ($hasSuccess) {
207
  $listing = Mage::getModel('diglin_ricento/products_listing')->load($this->_productsListingId);
208
+ if ($listing->getId()) {
209
+ $listing
210
+ ->setStatus(Diglin_Ricento_Helper_Data::STATUS_LISTED)
211
+ ->save();
212
+ }
213
  }
214
 
 
 
215
  return $this;
216
  }
217
 
223
  {
224
  return Mage::helper('diglin_ricento')->__('Report: %d success, %d error(s)', $this->_totalSuccess, $this->_totalError);
225
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
app/code/community/Diglin/Ricento/Model/Dispatcher/Order.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -27,26 +27,25 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
27
  protected $_jobType = Diglin_Ricento_Model_Sync_Job::TYPE_ORDER;
28
 
29
  /**
 
 
30
  * @return $this
31
  */
32
  public function proceed()
33
  {
34
- $productsListingResource = Mage::getResourceModel('diglin_ricento/products_listing');
35
-
36
- $readListingConnection = $productsListingResource->getReadConnection();
37
- $select = $readListingConnection
38
  ->select()
39
- ->from($productsListingResource->getTable('diglin_ricento/products_listing'), 'entity_id');
40
 
41
- $listingIds = $readListingConnection->fetchCol($select);
42
 
43
  foreach ($listingIds as $listingId) {
44
- $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
45
-
46
- $readConnection = $itemResource->getReadConnection();
47
  $select = $readConnection
48
  ->select()
49
- ->from($itemResource->getTable('diglin_ricento/products_listing_item'), 'item_id')
 
50
  ->where('products_listing_id = :id AND status = :status AND is_planned = 0');
51
 
52
  $binds = array('id' => $listingId, 'status' => Diglin_Ricento_Helper_Data::STATUS_LISTED);
@@ -63,7 +62,10 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
63
 
64
  // pending progress doesn't make sense here as we cleanup before but keep it to be sure everything ok
65
  $job = Mage::getModel('diglin_ricento/sync_job');
66
- $job->loadByTypeListingIdProgress($this->_jobType, $listingId, array(Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING, Diglin_Ricento_Model_Sync_Job::PROGRESS_CHUNK_RUNNING));
 
 
 
67
 
68
  if ($job->getId()) {
69
  continue;
@@ -85,7 +87,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
85
  }
86
 
87
  unset($listingIds);
88
- unset($readListingConnection);
89
  unset($job);
90
  unset($jobListing);
91
 
@@ -98,65 +100,50 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
98
  protected function _proceed()
99
  {
100
  $article = null;
101
- $isUnsold = false;
102
- $jobListing = $this->_currentJobListing;
103
 
104
- $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_LISTED), $jobListing->getLastItemId());
105
  $itemCollection->addFieldToFilter('is_planned', 0);
106
 
107
- /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
108
- foreach ($itemCollection->getItems() as $item) {
109
-
110
- try {
111
- $sold = $this->getSoldArticles(array($item->getRicardoArticleId()), $item);
112
 
113
- if (!$sold) {
114
- $article = $this->_getUnsoldArticles($item);
115
- if (!is_null($article)) {
116
- $isUnsold = true;
117
- }
118
- }
119
-
120
- } catch (Exception $e) {
121
- $this->_handleException($e, Mage::getSingleton('diglin_ricento/api_services_selleraccount'));
122
- $e = null;
123
- // keep going for the next item - no break
124
- }
125
-
126
- if ($article && $article->getArticleId() && $isUnsold) {
127
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
128
- $this->_itemMessage = array('success' => $this->_getHelper()->__('Sorry, the product has not been sold'));
129
- $item->getResource()->saveCurrentItem($item->getId(), array('status' => Diglin_Ricento_Helper_Data::STATUS_STOPPED, 'is_planned' => 0, 'ricardo_article_id' => $article->getArticleId()));
130
- }
131
 
 
 
132
  /**
133
  * Save item information and eventual error messages
134
  */
135
- if (!is_null($this->_itemMessage)) {
136
  $this->_getListingLog()->saveLog(array(
137
  'job_id' => $this->_currentJob->getId(),
138
- 'product_title' => $item->getProductTitle(),
 
139
  'products_listing_id' => $this->_productsListingId,
140
- 'product_id' => $item->getProductId(),
141
- 'message' => (is_array($this->_itemMessage)) ? $this->_jsonEncode($this->_itemMessage) : $this->_itemMessage,
142
- 'log_status' => $this->_itemStatus,
143
  'log_type' => $this->_logType,
144
  'created_at' => Mage::getSingleton('core/date')->gmtDate()
145
  ));
146
  }
147
-
148
- /**
149
- * Save the current information of the process to allow live display via ajax call
150
- */
151
- $jobListing->saveCurrentJob(array(
152
- 'total_proceed' => ++$this->_totalProceed,
153
- 'last_item_id' => $item->getId()
154
- ));
155
-
156
- $this->_itemMessage = null;
157
- $this->_itemStatus = null;
158
  }
159
 
 
 
 
 
 
 
 
 
 
160
  unset($itemCollection);
161
 
162
  return $this;
@@ -164,13 +151,18 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
164
 
165
  /**
166
  * @param array $articleIds
167
- * @param Diglin_Ricento_Model_Products_Listing_Item $productItem
168
- * @return bool
169
- * @throws Exception
170
  */
171
- public function getSoldArticles($articleIds = array(), Diglin_Ricento_Model_Products_Listing_Item $productItem = null)
172
  {
173
  $soldArticlesParameter = new SoldArticlesParameter();
 
 
 
 
 
 
 
174
 
175
  /**
176
  * Set minimum end date to filter e.g. last day. Do not use a higher value as the minimum sales duration is 1 day,
@@ -179,33 +171,41 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
179
  $soldArticlesParameter
180
  ->setPageSize($this->_limit) // if not defined, default is 10
181
  ->setArticleIdsFilter($articleIds)
182
- ->setMinimumEndDate($this->_getHelper()->getJsonDate(time() - (3 * 24 * 60 * 60)));
 
183
 
184
  $sellerAccountService = Mage::getSingleton('diglin_ricento/api_services_selleraccount')->setCanUseCache(false);
185
  $sellerAccountService->setCurrentWebsite($this->_getListing()->getWebsiteId());
186
 
187
- $soldArticles = $sellerAccountService->getSoldArticles($soldArticlesParameter);
188
- $soldArticles = array_reverse($soldArticles);
189
 
190
- $productItem->setLoadFallbackOptions(true);
 
191
 
192
- foreach ($soldArticles as $soldArticle) {
 
 
 
 
 
 
 
 
 
 
193
 
194
  $rawData = $soldArticle;
195
  $soldArticle = $this->_getHelper()->extractData($soldArticle);
196
  $transaction = $soldArticle->getTransaction();
197
 
198
- $listing = $this->_getListing();
199
-
200
  if ($transaction && count($transaction) > 0) {
201
 
202
  /**
203
  * 1. Check that the transaction doesn't already exists
204
  */
205
- $salesTransaction = Mage::getModel('diglin_ricento/sales_transaction')
206
- ->load($transaction->getBidId(), 'bid_id');
207
-
208
- if ($salesTransaction->getId()) {
209
  continue;
210
  }
211
 
@@ -216,14 +216,15 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
216
  if (!isset($references[0]['InternalReferenceValue'])) {
217
  continue;
218
  }
219
- $extractedInternReference = Mage::helper('diglin_ricento')->extractInternalReference($references[0]['InternalReferenceValue']);
220
 
 
221
  if (!($extractedInternReference instanceof Varien_Object)) {
222
  continue;
223
  }
224
 
225
  if (is_null($productItem) || $productItem->getId() != $extractedInternReference->getItemId()) {
226
  $productItem = Mage::getModel('diglin_ricento/products_listing_item')->load($extractedInternReference->getItemId());
 
227
  }
228
 
229
  if (!$productItem->getId() || $productItem->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED) {
@@ -233,111 +234,37 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
233
  /**
234
  * 3. Create customer if not exist and set his default billing address
235
  */
236
- $customer = $this->_getCustomer($transaction->getBuyer(), $listing->getWebsiteId());
237
- $buyerAddress = $transaction->getBuyer()->getAddresses();
238
 
239
  if ($customer) {
240
-
241
- $address = $customer->getDefaultBillingAddress();
242
-
243
- $street = $buyerAddress->getAddress1() . ' ' . $buyerAddress->getStreetNumber()
244
- . (($buyerAddress->getAddress2()) ? "\n" . $buyerAddress->getAddress2() : '')
245
- . (($buyerAddress->getPostalBox()) ? "\n" . $buyerAddress->getPostalBox() : '');
246
-
247
- $postCode = $buyerAddress->getZipCode();
248
- $city = $buyerAddress->getCity();
249
-
250
- if (!$address || ($address->getCity() != $city && $address->getPostcode() != $postCode && $address->getStreet() != $street)) {
251
-
252
- /**
253
- * Ricardo API doesn't provide the region and Magento 1.6 doesn't allow to make region optional
254
- * We use the first region found for the current country but it's far to be good
255
- * @todo add a "other" region into each country having required region
256
- */
257
- $countryId = $this->_getCountryId($buyerAddress->getCountry());
258
- $regionId = null;
259
- if (Mage::helper('directory')->isRegionRequired($countryId)) {
260
- $regionId = Mage::getModel('directory/region')->getCollection()
261
- ->addFieldToFilter('country_id', $countryId)
262
- ->getFirstItem()
263
- ->getId();
264
- }
265
-
266
- $phone = ($transaction->getBuyer()->getPhone()) ? $transaction->getBuyer()->getPhone() : $transaction->getBuyer()->getMobile();
267
-
268
- $address = Mage::getModel('customer/address');
269
- $address
270
- ->setCustomerId($customer->getId())
271
- ->setCompany($transaction->getBuyer()->getCompanyName())
272
- ->setLastname($customer->getLastname())
273
- ->setFirstname($customer->getFirstname())
274
- ->setStreet($street)
275
- ->setPostcode($postCode)
276
- ->setCity($city)
277
- ->setRegionId($regionId)
278
- ->setCountryId($countryId)
279
- ->setTelephone($phone)
280
- ->setIsDefaultBilling(true)
281
- ->setIsDefaultShipping(true)
282
- ->setSaveInAddressBook(1)
283
- ->save();
284
-
285
- $customer->addAddress($address);
286
- }
287
  } else {
288
- Mage::log($transaction->getBuyer(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE);
289
  throw new Exception($this->_getHelper()->__('Customer creation failed! ricardo.ch transaction cannot be added.'));
290
  }
291
 
292
  /**
293
- * 4. Prepare data transaction
294
- */
295
- $lang = $this->_getHelper()->getLocalCodeFromRicardoLanguageId($soldArticle->getMainLanguageId());
296
- $shippingDescription = $productItem->getShippingPaymentRule()->getShippingDescription($lang);
297
- $paymentDescription = $productItem->getShippingPaymentRule()->getPaymentDescription($lang);
298
-
299
- /**
300
- * 5. Insert transaction into DB for future use
301
  */
302
- $salesTransaction = Mage::getModel('diglin_ricento/sales_transaction');
303
- $salesTransaction
304
- ->setBidId($transaction->getBidId())
305
- ->setWebsiteId($listing->getWebsiteId())
306
- ->setCustomerId($customer->getId())
307
- ->setAddressId($address->getId())
308
- ->setRicardoCustomerId($customer->getRicardoId())
309
- ->setRicardoArticleId($soldArticle->getArticleId())
310
- ->setQty($transaction->getBuyerQuantity())
311
- ->setViewCount($soldArticle->getViewCount())
312
- ->setShippingFee($soldArticle->getDeliveryCost())
313
- ->setShippingText($soldArticle->getDeliveryText()) // @fixme - if bought in FR and the API use the DE key, text will in DE. I have no efficient solution now
314
- ->setShippingMethod($soldArticle->getDeliveryId())
315
- ->setShippingCumulativeFee((int)$soldArticle->getIsCumulativeShipping())
316
- ->setLanguageId($soldArticle->getMainLanguageId())
317
- ->setShippingDescription($shippingDescription)
318
- ->setPaymentMethods(implode(',', $soldArticle->getPaymentMethodIds()->getData()))
319
- ->setPaymentDescription($paymentDescription)
320
- ->setTotalBidPrice($soldArticle->getWinningBidPrice())
321
- ->setProductId($extractedInternReference->getProductId())
322
- ->setRawData(Mage::helper('core')->jsonEncode($rawData))
323
- ->setSoldAt($this->_getHelper()->getJsonTimestamp($soldArticle->getEndDate()))
324
- ->save();
325
 
326
  /**
327
- * 6. Decrease the quantity at products listing item level and stop if needed
328
  */
329
  $productItem
330
- ->setQtyInventory($productItem->getQtyInventory() - $salesTransaction->getQty());
 
 
331
 
332
- if ($productItem->getQtyInventory() <= 0) {
333
- $productItem->setRicardoArticleId(null);
334
- $productItem->setStatus(Diglin_Ricento_Helper_Data::STATUS_STOPPED);
 
 
 
 
 
335
  }
336
-
337
- $productItem->save();
338
-
339
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
340
- $this->_itemMessage = array('success' => $this->_getHelper()->__('The product has been sold'));
341
  }
342
  }
343
 
@@ -348,11 +275,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
348
  unset($productItem);
349
  unset($customer);
350
 
351
- if ($this->_itemStatus == Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS) {
352
- return true;
353
- }
354
-
355
- return false;
356
  }
357
 
358
  /**
@@ -362,13 +285,13 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
362
  * @param int $websiteId
363
  * @return bool|Mage_Customer_Model_Customer
364
  */
365
- protected function _getCustomer(Varien_Object $buyer, $websiteId = Mage_Core_Model_App::ADMIN_STORE_ID)
366
  {
367
  if (!$buyer->getBuyerId()) {
368
  return false;
369
  }
370
 
371
- $storeId = $this->_getStoreId($websiteId);
372
 
373
  /* @var $customer Mage_Customer_Model_Customer */
374
  $customer = Mage::getModel('customer/customer')
@@ -381,7 +304,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
381
  ->setLastname($buyer->getLastName())
382
  ->setEmail($buyer->getEmail())
383
  ->setPassword($customer->generatePassword())
384
- ->setStoreId($storeId)
385
  ->setWebsiteId($websiteId)
386
  ->setConfirmation(null);
387
  }
@@ -392,19 +315,17 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
392
  ->setRicardoUsername($buyer->getNickName());
393
  }
394
 
395
- if ($customer->hasDataChanges()) {
396
- $customer->save();
397
- }
398
 
399
- Mage::app()->getLocale()->emulate($storeId);
400
 
401
- if ($customer->isObjectNew() && Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_ACCOUNT_CREATION_EMAIL, $storeId)) {
402
  if ($customer->isConfirmationRequired()) {
403
  $typeEmail = 'confirmation';
404
  } else {
405
  $typeEmail = 'registered';
406
  }
407
- $customer->sendNewAccountEmail($typeEmail, '', $storeId);
408
  }
409
 
410
  Mage::app()->getLocale()->revert();
@@ -413,7 +334,116 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
413
  }
414
 
415
  /**
416
- * Create new orders for transactions done more than 30 min in past
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
417
  *
418
  * @return $this
419
  */
@@ -422,7 +452,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
422
  $customerTransactions = array();
423
  $mergeOrder = Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_MERGE_ORDER);
424
 
425
- $delay = ($mergeOrder) ? 30 : 1;
426
 
427
  /**
428
  * Get transaction older than 30 or 1 minutes and when no order was created
@@ -432,7 +462,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
432
  $transactionCollection
433
  ->getSelect()
434
  ->where('order_id IS NULL')
435
- ->where('UNIX_TIMESTAMP(sold_at) + ( ? * 60) < UNIX_TIMESTAMP(now())', (int) $delay); // 30 or 1 min past
436
 
437
  $inc = 0;
438
  foreach ($transactionCollection->getItems() as $transactionItem) {
@@ -455,18 +485,11 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
455
  }
456
  }
457
 
 
 
 
458
  if ($this->_productsListingId) {
459
- /**
460
- * Set the status to stop of products having parent and when all other children are stopped
461
- */
462
- $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
463
- $itemResource->setParentStatusStop($this->_productsListingId);
464
-
465
- /**
466
- * Stop the list if all products listing items are stopped
467
- */
468
- $listResource = Mage::getResourceModel('diglin_ricento/products_listing');
469
- $listResource->setStatusStop($this->_productsListingId);
470
  }
471
 
472
  unset($transactionCollection);
@@ -476,148 +499,60 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
476
  }
477
 
478
  /**
 
 
 
479
  * @param array $transactions
480
  */
481
  public function createNewOrder($transactions)
482
  {
483
- $quote = null;
484
  $dispatchedTransactions = array();
485
- $storeId = $shippingTransactionMethod = $shippingMethodFee = $highestShippingFee = 0;
486
  $shippingText = $shippingDescription = '';
487
- $paymentMethod = $shippingMethod = Diglin_Ricento_Model_Sales_Method_Payment::PAYMENT_CODE;
488
 
489
  try {
490
- /**
491
- * If a customer ordered several articles of the same seller in a short period of time
492
- * the order will merge all articles.
493
- */
494
-
495
  /* @var $transaction Diglin_Ricento_Model_Sales_Transaction */
496
  foreach ($transactions as $transaction) {
497
 
498
- $storeId = $this->_getStoreId($transaction->getWebsiteId());
499
 
500
- Mage::app()->getLocale()->emulate($storeId);
 
501
 
502
- /**
503
- * 1. Init Quote and define customer and his address
504
- */
505
  if (is_null($quote)) {
506
- $quote = Mage::getModel('sales/quote');
507
- $quote->setStoreId($storeId);
508
-
509
- $customerId = $transaction->getCustomerId();
510
- $customer = Mage::getModel('customer/customer')->load($customerId);
511
-
512
- $address = Mage::getModel('customer/address')->load($transaction->getAddressId());
513
- $address->setCustomer($customer);
514
-
515
- $quoteAddress = Mage::getModel('sales/quote_address');
516
- $quoteAddress->importCustomerAddress($address);
517
-
518
- $quote->assignCustomerWithAddressChange($customer, $quoteAddress, $quoteAddress);
519
- $quote->getBillingAddress()->setPaymentMethod($paymentMethod);
520
  }
521
 
522
- /**
523
- * 2. Add product and its information to the quote
524
- */
525
- $infoBuyRequest = new Varien_Object();
526
- $infoBuyRequest
527
- ->setQty($transaction->getQty())
528
- ->setIsRicardo(true)
529
- ->setRicardoTransactionId($transaction->getId())
530
- ->setShippingCumulativeFee($transaction->getShippingCumulativeFee())
531
- ->setShippingFee($transaction->getShippingFee());
532
-
533
- $product = Mage::getModel('catalog/product')
534
- ->setStoreId($storeId)
535
- ->load($transaction->getProductId())
536
- ->setSkipCheckRequiredOption(true);
537
-
538
- if (!$product->getId()) {
539
  continue;
540
  }
541
 
542
- $quoteItem = $quote->addProduct($product, $infoBuyRequest);
543
-
544
- // Error with a product which is missing or have required options
545
- if (is_string($quoteItem)) {
546
- Mage::throwException($quoteItem);
547
- }
548
 
549
- $quoteItem
550
- // Set unit custom price
551
- ->setCustomPrice($transaction->getTotalBidPrice())
552
- ->setOriginalCustomPrice($transaction->getTotalBidPrice());
553
-
554
- /**
555
- * 3. Set shipping information, price, etc
556
- */
557
- $shippingText = $transaction->getShippingText(); // @todo provide correct language
558
- $shippingDescription = $transaction->getShippingDescription(); // @todo get shipping description in correct language
559
-
560
- /**
561
- * 4. Keep the complete transactions list for later use
562
- */
563
  $dispatchedTransactions[$transaction->getBidId()] = $transaction->getId();
564
  }
565
 
566
- if ($quote) {
567
- /**
568
- * Define payment method and related information
569
- */
570
- $quote
571
- ->setIsRicardo(1)
572
- ->setQuoteCurrencyCode(Mage::getStoreConfig(Diglin_Ricento_Helper_Data::PAYMENT_CURRENCY));
573
-
574
- $payment = $quote->getPayment();
575
- $payment->importData(array(
576
- 'method' => $paymentMethod,
577
- 'additional_data' => Mage::helper('core')->jsonEncode(array(
578
- 'is_ricardo' => true,
579
- 'ricardo_payment_methods' => $transaction->getPaymentMethods(),
580
- 'ricardo_transaction_ids' => implode(',', $dispatchedTransactions),
581
- 'ricardo_bid_ids' => implode(',', array_keys($dispatchedTransactions)),
582
- )
583
- )));
584
 
585
- /**
586
- * Set Shipping information and price
587
- * @see Diglin_Ricento_Model_Sales_Method_Shipping::collectRates
588
- */
589
- Mage::getSingleton('core/session')
590
  ->setRicardoShippingDescription($shippingText . "\n" . $shippingDescription)
591
  ->setRicardoShippingMethod($shippingTransactionMethod);
592
 
593
- $shipping = $quote->getShippingAddress();
594
- $shipping->setShippingMethod($shippingMethod . '_' . $shippingTransactionMethod);
595
-
596
- $quote->addData(array(
597
- 'customer_note_notify' => false,
598
- 'customer_note' => $this->_getHelper()->__('Order automatically generated by the ricardo.ch Extension.'))
599
- );
600
-
601
- $quote->collectTotals()->save();
602
 
603
  if ($quote->getId()) {
604
- // Session variables needed to create order
605
- $this->_getSession()
606
- ->setQuoteId($quote->getId())
607
- ->setStoreId($quote->getStoreId())
608
- ->setCustomer($quote->getCustomer())
609
- ->setCustomerId($quote->getCustomer()->getId());
610
-
611
- /* @var $order Mage_Adminhtml_Model_Sales_Order_Create */
612
- $order = $this->_getOrderCreateModel()
613
  ->initRuleData()
614
- ->collectShippingRates()
615
- ->setSendConfirmation(Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_ORDER_CREATION_EMAIL, $storeId))
616
- ->createOrder();
617
 
618
- /**
619
- * Define order status
620
- */
621
  $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Diglin_Ricento_Helper_Data::ORDER_STATUS_PENDING, $this->_getHelper()->__('Payment is pending'), false);
622
 
623
  // @fixme getIsTransactionCompleted or getIsTransactionCancelled has no value from ricardo.ch side at the moment, wait API update
@@ -630,9 +565,8 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
630
  // $order->setState(Mage_Sales_Model_Order::STATE_CANCELED, Diglin_Ricento_Helper_Data::ORDER_STATUS_CANCEL, $this->_getHelper()->__('Order canceled on ricardo.ch side'), false);
631
  // }
632
 
633
- $quote
634
- ->setIsActive(false)
635
- ->save();
636
 
637
  /**
638
  * Save the new order id to the ricardo transaction
@@ -645,53 +579,190 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
645
  }
646
  }
647
  }
648
-
649
- Mage::app()->getLocale()->revert();
650
  }
 
 
 
651
  } catch (Exception $e) {
652
 
653
  if (!isset($transaction) || !($transaction instanceof Diglin_Ricento_Model_Sales_Transaction)) {
654
  $transaction = new Varien_Object();
655
  }
656
- if (!isset($product) || !($product instanceof Mage_Catalog_Model_Product)) {
657
- $product = new Varien_Object();
658
- }
659
-
660
- // We store and send the exception but don't block the rest of the process
661
- Mage::log("\n" . $e->__toString(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE);
662
- Mage::helper('diglin_ricento/tools')->sendAdminNotification('Error with ricardo Transaction ID: ' . $transaction->getBidId() . ' - Product ID:' . $product->getId() . "\n" . $e->__toString());
663
 
664
- //@todo set that the job has an error and save the information in the product listing log
665
 
666
- /* @var $errors Mage_Core_Model_Message_Collection */
667
- $errors = $this->_getSession()->getMessages(true);
668
- if ($errors) {
669
- Mage::log($errors, Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE);
670
  }
671
 
672
  // Deactivate the last quote if a problem occur to prevent cart display in frontend to the customer
673
- $quote = $this->_getSession()->getQuote();
674
- $quote->setIsActive(false)
675
- ->setReservedOrderId(NULL)
676
- ->save();
677
-
678
- if (Mage::app()->getStore()->isAdmin()) {
679
- Mage::app()->getLocale()->revert();
680
  }
 
 
681
  }
682
 
683
  // force to cleanup model, session and rule_data for the next orders to generate otherwise conflicts will occur
684
- Mage::unregister('_singleton/adminhtml/sales_order_create');
685
- Mage::unregister('_singleton/adminhtml/session_quote');
686
  Mage::unregister('rule_data');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
  }
688
 
689
  /**
690
  * Retrieve session object
691
  *
 
692
  * @return Mage_Adminhtml_Model_Session_Quote
693
  */
694
- protected function _getSession()
695
  {
696
  return Mage::getSingleton('adminhtml/session_quote');
697
  }
@@ -699,11 +770,11 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
699
  /**
700
  * Retrieve order create model
701
  *
702
- * @return Mage_Adminhtml_Model_Sales_Order_Create
703
  */
704
- protected function _getOrderCreateModel()
705
  {
706
- return Mage::getSingleton('adminhtml/sales_order_create');
707
  }
708
 
709
  /**
@@ -711,7 +782,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
711
  * @return string
712
  * @throws Exception
713
  */
714
- protected function _getCountryId($countryRicardoId)
715
  {
716
  $countryName = '';
717
  $countries = Mage::getSingleton('diglin_ricento/api_services_system')
@@ -725,7 +796,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
725
  }
726
  }
727
 
728
- $code = $this->_translateCountryNameToCode($countryName);
729
  if (!$code) {
730
  throw new Exception(Mage::helper('diglin_ricento')->__('Country Code is not available. Please contact the author of this extension or support.'));
731
  }
@@ -740,7 +811,7 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
740
  * @param $countryName
741
  * @return string
742
  */
743
- protected function _translateCountryNameToCode($countryName)
744
  {
745
  $countryCode = array(
746
  'Schweiz' => 'CH',
@@ -761,10 +832,10 @@ class Diglin_Ricento_Model_Dispatcher_Order extends Diglin_Ricento_Model_Dispatc
761
 
762
  /**
763
  * @param int $websiteId
764
- * @return int
765
  */
766
- protected function _getStoreId($websiteId)
767
  {
768
- return Mage::app()->getWebsite($websiteId)->getDefaultStore()->getId();
769
  }
770
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
27
  protected $_jobType = Diglin_Ricento_Model_Sync_Job::TYPE_ORDER;
28
 
29
  /**
30
+ * Create Order Jobs for all products listing with the listed status
31
+ *
32
  * @return $this
33
  */
34
  public function proceed()
35
  {
36
+ $plResource = Mage::getResourceModel('diglin_ricento/products_listing');
37
+ $readConnection = $plResource->getReadConnection();
38
+ $select = $readConnection
 
39
  ->select()
40
+ ->from($plResource->getTable('diglin_ricento/products_listing'), 'entity_id');
41
 
42
+ $listingIds = $readConnection->fetchCol($select);
43
 
44
  foreach ($listingIds as $listingId) {
 
 
 
45
  $select = $readConnection
46
  ->select()
47
+ ->from(array('pli' => $plResource->getTable('diglin_ricento/products_listing_item')), 'item_id')
48
+ ->where('type <> ?', Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
49
  ->where('products_listing_id = :id AND status = :status AND is_planned = 0');
50
 
51
  $binds = array('id' => $listingId, 'status' => Diglin_Ricento_Helper_Data::STATUS_LISTED);
62
 
63
  // pending progress doesn't make sense here as we cleanup before but keep it to be sure everything ok
64
  $job = Mage::getModel('diglin_ricento/sync_job');
65
+ $job->loadByTypeListingIdProgress($this->_jobType, $listingId, array(
66
+ Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING,
67
+ Diglin_Ricento_Model_Sync_Job::PROGRESS_CHUNK_RUNNING
68
+ ));
69
 
70
  if ($job->getId()) {
71
  continue;
87
  }
88
 
89
  unset($listingIds);
90
+ unset($readConnection);
91
  unset($job);
92
  unset($jobListing);
93
 
100
  protected function _proceed()
101
  {
102
  $article = null;
103
+ $soldArticles = array();
 
104
 
105
+ $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_LISTED), $this->_currentJobListing->getLastItemId());
106
  $itemCollection->addFieldToFilter('is_planned', 0);
107
 
108
+ $ricardoArticleIds = $itemCollection->getColumnValues('ricardo_article_id');
109
+ $lastItem = $itemCollection->getLastItem();
 
 
 
110
 
111
+ try {
112
+ $soldArticles = $this->getSoldArticles($ricardoArticleIds);
113
+ } catch (Exception $e) {
114
+ $this->_handleException($e, Mage::getSingleton('diglin_ricento/api_services_selleraccount'));
115
+ $e = null;
116
+ // keep going - no break
117
+ }
 
 
 
 
 
 
 
 
 
 
 
118
 
119
+ /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
120
+ foreach ($soldArticles as $soldArticle) {
121
  /**
122
  * Save item information and eventual error messages
123
  */
124
+ if (isset($soldArticle['item_message'])) {
125
  $this->_getListingLog()->saveLog(array(
126
  'job_id' => $this->_currentJob->getId(),
127
+ 'product_title' => $soldArticle['product_title'],
128
+ 'product_id' => $soldArticle['product_id'],
129
  'products_listing_id' => $this->_productsListingId,
130
+ 'message' => (is_array($soldArticle['item_message'])) ? $this->_jsonEncode($soldArticle['item_message']) : $soldArticle['item_message'],
131
+ 'log_status' => $soldArticle['item_status'],
 
132
  'log_type' => $this->_logType,
133
  'created_at' => Mage::getSingleton('core/date')->gmtDate()
134
  ));
135
  }
 
 
 
 
 
 
 
 
 
 
 
136
  }
137
 
138
+ /**
139
+ * Save the current information of the process to allow live display via ajax call
140
+ */
141
+ $this->_totalProceed += count($ricardoArticleIds);
142
+ $this->_currentJobListing->saveCurrentJob(array(
143
+ 'total_proceed' => $this->_totalProceed,
144
+ 'last_item_id' => $lastItem->getId()
145
+ ));
146
+
147
  unset($itemCollection);
148
 
149
  return $this;
151
 
152
  /**
153
  * @param array $articleIds
154
+ * @return array
 
 
155
  */
156
+ private function _getSoldArticlesList(array $articleIds)
157
  {
158
  $soldArticlesParameter = new SoldArticlesParameter();
159
+ $delay = (3 * 24 * 60 * 60); // 3 days
160
+
161
+ $transactionCollection = Mage::getResourceModel('diglin_ricento/sales_transaction_collection');
162
+ $transactionCollection
163
+ ->addFieldToFilter('order_id', new Zend_Db_Expr('NULL'))
164
+ ->getSelect()
165
+ ->where('UNIX_TIMESTAMP(created_at) + (?) < UNIX_TIMESTAMP(now())', $delay);
166
 
167
  /**
168
  * Set minimum end date to filter e.g. last day. Do not use a higher value as the minimum sales duration is 1 day,
171
  $soldArticlesParameter
172
  ->setPageSize($this->_limit) // if not defined, default is 10
173
  ->setArticleIdsFilter($articleIds)
174
+ ->setExcludedTransactionIdsFilter($transactionCollection->getColumnValues('transaction_id'))
175
+ ->setMinimumEndDate($this->_getHelper()->getJsonDate(time() - $delay));
176
 
177
  $sellerAccountService = Mage::getSingleton('diglin_ricento/api_services_selleraccount')->setCanUseCache(false);
178
  $sellerAccountService->setCurrentWebsite($this->_getListing()->getWebsiteId());
179
 
180
+ $soldArticlesResult = $sellerAccountService->getSoldArticles($soldArticlesParameter);
 
181
 
182
+ return array_reverse($soldArticlesResult['SoldArticles']);
183
+ }
184
 
185
+ /**
186
+ * @param array $articleIds
187
+ * @param Diglin_Ricento_Model_Products_Listing_Item $productItem
188
+ * @return bool
189
+ * @throws Exception
190
+ */
191
+ public function getSoldArticles($articleIds = array(), Diglin_Ricento_Model_Products_Listing_Item $productItem = null)
192
+ {
193
+ $soldArticlesReturn = array();
194
+
195
+ foreach ($this->_getSoldArticlesList($articleIds) as $soldArticle) {
196
 
197
  $rawData = $soldArticle;
198
  $soldArticle = $this->_getHelper()->extractData($soldArticle);
199
  $transaction = $soldArticle->getTransaction();
200
 
 
 
201
  if ($transaction && count($transaction) > 0) {
202
 
203
  /**
204
  * 1. Check that the transaction doesn't already exists
205
  */
206
+ if (Mage::getResourceModel('diglin_ricento/sales_transaction_collection')
207
+ ->addFieldToFilter('bid_id', $transaction->getBidId())->getSize()
208
+ ) {
 
209
  continue;
210
  }
211
 
216
  if (!isset($references[0]['InternalReferenceValue'])) {
217
  continue;
218
  }
 
219
 
220
+ $extractedInternReference = $this->_getHelper()->extractInternalReference($references[0]['InternalReferenceValue']);
221
  if (!($extractedInternReference instanceof Varien_Object)) {
222
  continue;
223
  }
224
 
225
  if (is_null($productItem) || $productItem->getId() != $extractedInternReference->getItemId()) {
226
  $productItem = Mage::getModel('diglin_ricento/products_listing_item')->load($extractedInternReference->getItemId());
227
+ $productItem->setLoadFallbackOptions(true);
228
  }
229
 
230
  if (!$productItem->getId() || $productItem->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED) {
234
  /**
235
  * 3. Create customer if not exist and set his default billing address
236
  */
237
+ $customer = $this->getCustomerFromTransaction($transaction->getBuyer(), $this->_getListing()->getWebsiteId());
 
238
 
239
  if ($customer) {
240
+ $address = $this->getBillingAddress($customer, $transaction);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  } else {
242
+ Mage::log($transaction->getBuyer(), Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
243
  throw new Exception($this->_getHelper()->__('Customer creation failed! ricardo.ch transaction cannot be added.'));
244
  }
245
 
246
  /**
247
+ * 4. Insert transaction into DB for future use
 
 
 
 
 
 
 
248
  */
249
+ $salesTransaction = $this->saveTransaction($transaction, $customer, $address, $soldArticle, $productItem, $rawData);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
 
251
  /**
252
+ * 5. Decrease the quantity at products listing item level and stop it if needed
253
  */
254
  $productItem
255
+ ->setQtyInventory($productItem->getQtyInventory() - $salesTransaction->getQty())
256
+ ->setStatus(Diglin_Ricento_Helper_Data::STATUS_SOLD)
257
+ ->save();
258
 
259
+ if (!isset($soldArticlesReturn[$productItem->getId()])) {
260
+ $soldArticlesReturn[$productItem->getId()] = array(
261
+ 'item_id' => $productItem->getId(),
262
+ 'product_title' => $productItem->getProductTitle(),
263
+ 'product_id' => $productItem->getProductId(),
264
+ 'item_message' => array('success' => $this->_getHelper()->__('The product has been sold')),
265
+ 'item_status' => Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS
266
+ );
267
  }
 
 
 
 
 
268
  }
269
  }
270
 
275
  unset($productItem);
276
  unset($customer);
277
 
278
+ return $soldArticlesReturn;
 
 
 
 
279
  }
280
 
281
  /**
285
  * @param int $websiteId
286
  * @return bool|Mage_Customer_Model_Customer
287
  */
288
+ public function getCustomerFromTransaction(Varien_Object $buyer, $websiteId = Mage_Core_Model_App::ADMIN_STORE_ID)
289
  {
290
  if (!$buyer->getBuyerId()) {
291
  return false;
292
  }
293
 
294
+ $store = $this->getStoreFromWebsite($websiteId);
295
 
296
  /* @var $customer Mage_Customer_Model_Customer */
297
  $customer = Mage::getModel('customer/customer')
304
  ->setLastname($buyer->getLastName())
305
  ->setEmail($buyer->getEmail())
306
  ->setPassword($customer->generatePassword())
307
+ ->setStoreId($store->getId())
308
  ->setWebsiteId($websiteId)
309
  ->setConfirmation(null);
310
  }
315
  ->setRicardoUsername($buyer->getNickName());
316
  }
317
 
318
+ $customer->save();
 
 
319
 
320
+ Mage::app()->getLocale()->emulate($store->getId());
321
 
322
+ if ($customer->isObjectNew() && Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_ACCOUNT_CREATION_EMAIL, $store->getId())) {
323
  if ($customer->isConfirmationRequired()) {
324
  $typeEmail = 'confirmation';
325
  } else {
326
  $typeEmail = 'registered';
327
  }
328
+ $customer->sendNewAccountEmail($typeEmail, '', $store->getId());
329
  }
330
 
331
  Mage::app()->getLocale()->revert();
334
  }
335
 
336
  /**
337
+ * @param Mage_Customer_Model_Customer $customer
338
+ * @param $transaction
339
+ * @return Mage_Customer_Model_Address
340
+ * @throws Exception
341
+ */
342
+ public function getBillingAddress(Mage_Customer_Model_Customer $customer, $transaction)
343
+ {
344
+ $buyerAddress = $transaction->getBuyer()->getAddresses();
345
+
346
+ $address = $customer->getDefaultBillingAddress();
347
+
348
+ $street = $buyerAddress->getAddress1() . ' ' . $buyerAddress->getStreetNumber()
349
+ . (($buyerAddress->getAddress2()) ? "\n" . $buyerAddress->getAddress2() : '')
350
+ . (($buyerAddress->getPostalBox()) ? "\n" . $buyerAddress->getPostalBox() : '');
351
+
352
+ $postCode = $buyerAddress->getZipCode();
353
+ $city = $buyerAddress->getCity();
354
+
355
+ if (!$address || ($address->getCity() != $city && $address->getPostcode() != $postCode && $address->getStreet() != $street)) {
356
+
357
+ /**
358
+ * Ricardo API doesn't provide the region and Magento 1.6 doesn't allow to make region optional
359
+ * We use the first region found for the current country but it's far to be good
360
+ * @todo add a "other" region into each country having required region
361
+ */
362
+ $countryId = $this->getCountryId($buyerAddress->getCountry());
363
+ $regionId = null;
364
+ if (Mage::helper('directory')->isRegionRequired($countryId)) {
365
+ $regionId = Mage::getModel('directory/region')->getCollection()
366
+ ->addFieldToFilter('country_id', $countryId)
367
+ ->getFirstItem()
368
+ ->getId();
369
+ }
370
+
371
+ $phone = ($transaction->getBuyer()->getPhone()) ? $transaction->getBuyer()->getPhone() : $transaction->getBuyer()->getMobile();
372
+
373
+ $address = Mage::getModel('customer/address');
374
+ $address
375
+ ->setCustomerId($customer->getId())
376
+ ->setCompany($transaction->getBuyer()->getCompanyName())
377
+ ->setLastname($customer->getLastname())
378
+ ->setFirstname($customer->getFirstname())
379
+ ->setStreet($street)
380
+ ->setPostcode($postCode)
381
+ ->setCity($city)
382
+ ->setRegionId($regionId)
383
+ ->setCountryId($countryId)
384
+ ->setTelephone($phone)
385
+ ->setIsDefaultBilling(true)
386
+ ->setIsDefaultShipping(true)
387
+ ->setSaveInAddressBook(1)
388
+ ->save();
389
+
390
+ $customer->addAddress($address);
391
+ }
392
+
393
+ return $address;
394
+ }
395
+
396
+ /**
397
+ * @param $transaction
398
+ * @param Mage_Customer_Model_Customer $customer
399
+ * @param $address
400
+ * @param $soldArticle
401
+ * @param Diglin_Ricento_Model_Products_Listing_Item $productItem
402
+ * @param $rawData
403
+ * @return Diglin_Ricento_Model_Sales_Transaction
404
+ * @throws Exception
405
+ */
406
+ public function saveTransaction(
407
+ $transaction,
408
+ Mage_Customer_Model_Customer $customer,
409
+ Mage_Customer_Model_Address $address,
410
+ $soldArticle,
411
+ Diglin_Ricento_Model_Products_Listing_Item $productItem,
412
+ $rawData
413
+ ) {
414
+ $lang = $this->_getHelper()->getLocalCodeFromRicardoLanguageId($soldArticle->getMainLanguageId());
415
+ $transactionData = array(
416
+ 'bid_id' => $transaction->getBidId(),
417
+ 'website_id' => $this->_getListing()->getWebsiteId(),
418
+ 'customer_id' => $customer->getId(),
419
+ 'address_id' => $address->getId(),
420
+ 'ricardo_customer_id' => $customer->getRicardoId(),
421
+ 'ricardo_article_id' => $soldArticle->getArticleId(),
422
+ 'qty' => $transaction->getBuyerQuantity(),
423
+ 'view_count' => $soldArticle->getViewCount(),
424
+ 'shipping_fee' => $soldArticle->getDeliveryCost(),
425
+ 'shipping_text' => $soldArticle->getDeliveryText(), // @fixme - if bought in FR and the API use the DE key, text will in DE. I have no solution now
426
+ 'shipping_method' => $soldArticle->getDeliveryId(),
427
+ 'shipping_cumulative_fee' => (int)$soldArticle->getIsCumulativeShipping(),
428
+ 'language_id' => $soldArticle->getMainLanguageId(),
429
+ 'payment_methods' => implode(',', $soldArticle->getPaymentMethodIds()->getData()),
430
+ 'shipping_description' => $productItem->getShippingPaymentRule()->getShippingDescription($lang),
431
+ 'payment_description' => $productItem->getShippingPaymentRule()->getPaymentDescription($lang),
432
+ 'total_bid_price' => $soldArticle->getWinningBidPrice(),
433
+ 'product_id' => $productItem->getProductId(),
434
+ 'raw_data' => Mage::helper('core')->jsonEncode($rawData),
435
+ 'sold_at' => $this->_getHelper()->getJsonTimestamp($soldArticle->getEndDate())
436
+ );
437
+
438
+ $salesTransaction = Mage::getModel('diglin_ricento/sales_transaction')
439
+ ->addData($transactionData)
440
+ ->save();
441
+
442
+ return $salesTransaction;
443
+ }
444
+
445
+ /**
446
+ * Create new orders for transactions done more than 30 min in past (depends on the extension configuration)
447
  *
448
  * @return $this
449
  */
452
  $customerTransactions = array();
453
  $mergeOrder = Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_MERGE_ORDER);
454
 
455
+ $delay = ($mergeOrder) ? 30 : 0;
456
 
457
  /**
458
  * Get transaction older than 30 or 1 minutes and when no order was created
462
  $transactionCollection
463
  ->getSelect()
464
  ->where('order_id IS NULL')
465
+ ->where('UNIX_TIMESTAMP(sold_at) + ( ? * 60) < UNIX_TIMESTAMP(now())', (int) $delay); // 30 or 0 min past
466
 
467
  $inc = 0;
468
  foreach ($transactionCollection->getItems() as $transactionItem) {
485
  }
486
  }
487
 
488
+ /**
489
+ * Stop the list if all products listing items are stopped
490
+ */
491
  if ($this->_productsListingId) {
492
+ Mage::getResourceModel('diglin_ricento/products_listing')->setStatusStop($this->_productsListingId);
 
 
 
 
 
 
 
 
 
 
493
  }
494
 
495
  unset($transactionCollection);
499
  }
500
 
501
  /**
502
+ * If a customer ordered several articles of the same seller in a short period of time
503
+ * the order will merge all articles.
504
+ *
505
  * @param array $transactions
506
  */
507
  public function createNewOrder($transactions)
508
  {
509
+ $store = $quote = null;
510
  $dispatchedTransactions = array();
511
+ $shippingTransactionMethod = $shippingMethodFee = $highestShippingFee = 0;
512
  $shippingText = $shippingDescription = '';
 
513
 
514
  try {
 
 
 
 
 
515
  /* @var $transaction Diglin_Ricento_Model_Sales_Transaction */
516
  foreach ($transactions as $transaction) {
517
 
518
+ $store = $this->getStoreFromWebsite($transaction->getWebsiteId());
519
 
520
+ Mage::app()->getStore($store->getId())->setCurrentCurrency($this->_getCurrency());
521
+ Mage::app()->getLocale()->emulate($store->getId());
522
 
 
 
 
523
  if (is_null($quote)) {
524
+ $quote = $this->createQuote($transaction, $store);
 
 
 
 
 
 
 
 
 
 
 
 
 
525
  }
526
 
527
+ if (!$this->addProductToQuote($transaction, $store, $quote)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
528
  continue;
529
  }
530
 
531
+ // @todo provide correct language
532
+ $shippingText = $transaction->getShippingText();
533
+ $shippingDescription = $transaction->getShippingDescription();
 
 
 
534
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  $dispatchedTransactions[$transaction->getBidId()] = $transaction->getId();
536
  }
537
 
538
+ if ($quote && $store) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
539
 
540
+ // @see Diglin_Ricento_Model_Sales_Method_Shipping::collectRates
541
+ $this->_getHelper()->getRicardoShippingRegistry()
 
 
 
542
  ->setRicardoShippingDescription($shippingText . "\n" . $shippingDescription)
543
  ->setRicardoShippingMethod($shippingTransactionMethod);
544
 
545
+ $this->prepareQuote($quote, $dispatchedTransactions, $transaction->getPaymentMethods());
 
 
 
 
 
 
 
 
546
 
547
  if ($quote->getId()) {
548
+ $orderCreateModel = $this->getOrderCreateModel();
549
+ $orderCreateModel
550
+ ->setQuote($quote)
551
+ ->setStore($store)
 
 
 
 
 
552
  ->initRuleData()
553
+ ->setSendConfirmation(Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_ORDER_CREATION_EMAIL, $store->getId()));
 
 
554
 
555
+ $order = $orderCreateModel->createOrder();
 
 
556
  $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Diglin_Ricento_Helper_Data::ORDER_STATUS_PENDING, $this->_getHelper()->__('Payment is pending'), false);
557
 
558
  // @fixme getIsTransactionCompleted or getIsTransactionCancelled has no value from ricardo.ch side at the moment, wait API update
565
  // $order->setState(Mage_Sales_Model_Order::STATE_CANCELED, Diglin_Ricento_Helper_Data::ORDER_STATUS_CANCEL, $this->_getHelper()->__('Order canceled on ricardo.ch side'), false);
566
  // }
567
 
568
+ // $quote->setIsActive(false);
569
+ // $quote->save();
 
570
 
571
  /**
572
  * Save the new order id to the ricardo transaction
579
  }
580
  }
581
  }
 
 
582
  }
583
+
584
+ Mage::app()->getLocale()->revert();
585
+
586
  } catch (Exception $e) {
587
 
588
  if (!isset($transaction) || !($transaction instanceof Diglin_Ricento_Model_Sales_Transaction)) {
589
  $transaction = new Varien_Object();
590
  }
 
 
 
 
 
 
 
591
 
592
+ $message = 'Error with ricardo Transaction ID: ' . $transaction->getBidId() . ' - Product ID:' . $transaction->getProductId() . "\n" . $e->__toString();
593
 
594
+ // We store and send the exception but don't block the rest of the process
595
+ Mage::log($message, Zend_Log::ERR, Diglin_Ricento_Helper_Data::LOG_FILE, true);
596
+ if ($this->_getHelper()->canSendEmailNotification()) {
597
+ Mage::helper('diglin_ricento/tools')->sendAdminNotification($message);
598
  }
599
 
600
  // Deactivate the last quote if a problem occur to prevent cart display in frontend to the customer
601
+ if ($quote && $quote->getId()) {
602
+ $quote->setIsActive(false)
603
+ ->setReservedOrderId(null)
604
+ ->save();
 
 
 
605
  }
606
+
607
+ Mage::app()->getLocale()->revert();
608
  }
609
 
610
  // force to cleanup model, session and rule_data for the next orders to generate otherwise conflicts will occur
611
+ Mage::unregister('_singleton/diglin_ricento/sales_order_create');
 
612
  Mage::unregister('rule_data');
613
+ Mage::unregister('ricardo_shipping');
614
+ }
615
+
616
+ /**
617
+ * Init Quote and define customer and his address
618
+ *
619
+ * @param Diglin_Ricento_Model_Sales_Transaction $transaction
620
+ * @param Mage_Core_Model_Store $store
621
+ * @return Mage_Sales_Model_Quote
622
+ */
623
+ public function createQuote(Diglin_Ricento_Model_Sales_Transaction $transaction, Mage_Core_Model_Store $store)
624
+ {
625
+ $customer = Mage::getModel('customer/customer')->load($transaction->getCustomerId());
626
+ $address = Mage::getModel('customer/address')->load($transaction->getAddressId());
627
+ $address->setCustomer($customer);
628
+
629
+ $quoteAddress = Mage::getModel('sales/quote_address');
630
+ $quoteAddress->importCustomerAddress($address);
631
+ $quoteAddress->setLimitCarrier(Diglin_Ricento_Model_Sales_Method_Shipping::SHIPPING_CODE);
632
+
633
+ $quote = Mage::getModel('sales/quote');
634
+ $quote
635
+ ->setStoreId($store->getId())
636
+ ->assignCustomerWithAddressChange($customer, $quoteAddress, $quoteAddress);
637
+
638
+ $quote->getBillingAddress()->setPaymentMethod(Diglin_Ricento_Model_Sales_Method_Payment::PAYMENT_CODE);
639
+ $quote->save();
640
+
641
+ return $quote;
642
+ }
643
+
644
+ /**
645
+ * Add product and its information to the quote
646
+ *
647
+ * @param Diglin_Ricento_Model_Sales_Transaction $transaction
648
+ * @param Mage_Core_Model_Store $store
649
+ * @param Mage_Sales_Model_Quote $quote
650
+ * @throws Mage_Core_Exception
651
+ * @return bool
652
+ */
653
+ public function addProductToQuote(Diglin_Ricento_Model_Sales_Transaction $transaction, Mage_Core_Model_Store $store, Mage_Sales_Model_Quote $quote)
654
+ {
655
+ $infoBuyRequest = new Varien_Object();
656
+ $infoBuyRequest
657
+ ->setQty($transaction->getQty())
658
+ ->setIsRicardo(true)
659
+ ->setRicardoTransactionId($transaction->getId())
660
+ ->setShippingCumulativeFee($transaction->getShippingCumulativeFee())
661
+ ->setShippingFee($this->getShippingFee($transaction, $store->getId()));
662
+
663
+ $product = Mage::getModel('catalog/product')
664
+ ->setStoreId($store->getId())
665
+ ->load($transaction->getProductId())
666
+ ->setSkipCheckRequiredOption(true);
667
+
668
+ if (!$product->getId()) {
669
+ return false;
670
+ }
671
+
672
+ $quoteItem = $quote->addProduct($product, $infoBuyRequest);
673
+
674
+ // Error with a product which is missing or have required options
675
+ if (is_string($quoteItem)) {
676
+ Mage::throwException($quoteItem);
677
+ }
678
+
679
+ $quoteItem
680
+ // Set unit custom price
681
+ ->setCustomPrice($transaction->getTotalBidPrice())
682
+ ->setOriginalCustomPrice($transaction->getTotalBidPrice());
683
+
684
+ return true;
685
+ }
686
+
687
+ /**
688
+ * @param Diglin_Ricento_Model_Sales_Transaction $transaction
689
+ * @param int|Mage_Core_Model_Store $storeId
690
+ * @return float|int|null
691
+ */
692
+ public function getShippingFee(Diglin_Ricento_Model_Sales_Transaction $transaction, $storeId = null)
693
+ {
694
+ $currency = $this->_getCurrency();
695
+ $shippingFee = $transaction->getShippingFee();
696
+ $baseCurrencyCode = Mage::app()->getStore($storeId)->getBaseCurrencyCode();
697
+
698
+ if ($baseCurrencyCode != $currency->getCode()) {
699
+ $shippingFee = Mage::helper('diglin_ricento/price')->convert($shippingFee, $currency->getCode(), $baseCurrencyCode);
700
+ }
701
+
702
+ return $shippingFee;
703
+ }
704
+
705
+ /**
706
+ * @param Mage_Sales_Model_Quote $quote
707
+ * @param array $dispatchedTransactions
708
+ * @param $paymentMethods
709
+ * @return Mage_Sales_Model_Quote
710
+ */
711
+ public function prepareQuote(Mage_Sales_Model_Quote $quote, array $dispatchedTransactions, $paymentMethods)
712
+ {
713
+ $shippingTransactionMethod = $this->_getHelper()
714
+ ->getRicardoShippingRegistry()
715
+ ->getRicardoShippingMethod();
716
+
717
+ /**
718
+ * Define payment method and related information
719
+ */
720
+ $quote
721
+ ->setIsRicardo(1)
722
+ ->setForcedCurrency($this->_getCurrency());
723
+
724
+ // Must be before getPayment()->ImportData() cause of calls of collectTotals() method
725
+ $shippingAddress = $quote->getShippingAddress();
726
+ $shippingAddress
727
+ ->setCollectShippingRates(true)
728
+ ->setShippingMethod(Diglin_Ricento_Model_Sales_Method_Shipping::SHIPPING_CODE . '_' . $shippingTransactionMethod)
729
+ ->collectShippingRates();
730
+
731
+ $quote
732
+ ->getPayment()
733
+ ->importData(
734
+ array(
735
+ 'method' => Diglin_Ricento_Model_Sales_Method_Payment::PAYMENT_CODE,
736
+ 'additional_data' => Mage::helper('core')->jsonEncode(array(
737
+ 'is_ricardo' => true,
738
+ 'ricardo_payment_methods' => $paymentMethods,
739
+ 'ricardo_transaction_ids' => implode(',', $dispatchedTransactions),
740
+ 'ricardo_bid_ids' => implode(',', array_keys($dispatchedTransactions)),
741
+ )
742
+ )
743
+ )
744
+ );
745
+
746
+ $quote
747
+ ->addData(
748
+ array(
749
+ 'customer_note_notify' => false,
750
+ 'customer_note' => $this->_getHelper()->__('Order automatically generated by the ricardo.ch Extension.')
751
+ )
752
+ );
753
+
754
+ $quote->save();
755
+
756
+ return $quote;
757
  }
758
 
759
  /**
760
  * Retrieve session object
761
  *
762
+ * @deprecated
763
  * @return Mage_Adminhtml_Model_Session_Quote
764
  */
765
+ public function getSession()
766
  {
767
  return Mage::getSingleton('adminhtml/session_quote');
768
  }
770
  /**
771
  * Retrieve order create model
772
  *
773
+ * @return Diglin_Ricento_Model_Sales_Order_Create
774
  */
775
+ public function getOrderCreateModel()
776
  {
777
+ return Mage::getSingleton('diglin_ricento/sales_order_create');
778
  }
779
 
780
  /**
782
  * @return string
783
  * @throws Exception
784
  */
785
+ public function getCountryId($countryRicardoId)
786
  {
787
  $countryName = '';
788
  $countries = Mage::getSingleton('diglin_ricento/api_services_system')
796
  }
797
  }
798
 
799
+ $code = $this->translateCountryNameToCode($countryName);
800
  if (!$code) {
801
  throw new Exception(Mage::helper('diglin_ricento')->__('Country Code is not available. Please contact the author of this extension or support.'));
802
  }
811
  * @param $countryName
812
  * @return string
813
  */
814
+ public function translateCountryNameToCode($countryName)
815
  {
816
  $countryCode = array(
817
  'Schweiz' => 'CH',
832
 
833
  /**
834
  * @param int $websiteId
835
+ * @return Mage_Core_Model_Store
836
  */
837
+ public function getStoreFromWebsite($websiteId)
838
  {
839
+ return Mage::app()->getWebsite($websiteId)->getDefaultStore();
840
  }
841
  }
app/code/community/Diglin/Ricento/Model/Dispatcher/Relist.php DELETED
@@ -1,113 +0,0 @@
1
- <?php
2
- /**
3
- * ricardo.ch AG - Switzerland
4
- *
5
- * @author Sylvain Rayé <support at diglin.com>
6
- * @category Diglin
7
- * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
- */
11
-
12
- /**
13
- * Class Diglin_Ricento_Model_Dispatcher_Relist
14
- */
15
- class Diglin_Ricento_Model_Dispatcher_Relist extends Diglin_Ricento_Model_Dispatcher_Abstract
16
- {
17
- /**
18
- * @var int
19
- */
20
- protected $_logType = Diglin_Ricento_Model_Products_Listing_Log::LOG_TYPE_RELIST;
21
-
22
- /**
23
- * @var string
24
- */
25
- protected $_jobType = Diglin_Ricento_Model_Sync_Job::TYPE_RELIST;
26
-
27
- /**
28
- * @return $this
29
- * @deprecated since 1.0
30
- * @todo Relist is not used as we list again instead of relist, keep it at the moment
31
- */
32
- protected function _proceed()
33
- {
34
- $job = $this->_currentJob;
35
- $jobListing = $this->_currentJobListing;
36
-
37
- $sell = Mage::getSingleton('diglin_ricento/api_services_sell');
38
- $sell->setCurrentWebsite($this->_getListing()->getWebsiteId());
39
-
40
- $relistedArticle = null;
41
- $articleId = null;
42
- $hasSuccess = false;
43
-
44
- $itemCollection = $this->_getItemCollection(array(Diglin_Ricento_Helper_Data::STATUS_SOLD), $jobListing->getLastItemId());
45
-
46
- if ($itemCollection->count() == 0) {
47
- $job->setJobMessage(array($this->_getNoItemMessage()));
48
- $this->_progressStatus = Diglin_Ricento_Model_Sync_Job::PROGRESS_COMPLETED;
49
- return $this;
50
- }
51
-
52
- /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
53
- foreach ($itemCollection->getItems() as $item) {
54
-
55
- try {
56
- $relistedArticle = $sell->relistArticle($item);
57
-
58
- $articleId = $item->getRicardoArticleId();
59
- if (!empty($articleId)) {
60
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
61
- $this->_itemMessage = array('relisted_article' => print_r($relistedArticle, true));
62
- $hasSuccess = true;
63
- $item->getResource()->saveCurrentItem($item->getId(), array('status' => Diglin_Ricento_Helper_Data::STATUS_LISTED));
64
- } else {
65
- $this->_jobHasError = true;
66
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_ERROR;
67
- $item->getResource()->saveCurrentItem($item->getId(), array('status' => Diglin_Ricento_Helper_Data::STATUS_ERROR));
68
- }
69
-
70
- } catch (Exception $e) {
71
- $this->_handleException($e);
72
- $e = null;
73
- // keep going for the next item - no break
74
- }
75
-
76
- /**
77
- * Save item information and eventual error messages
78
- */
79
- $this->_getListingLog()->saveLog(array(
80
- 'job_id' => $job->getId(),
81
- 'product_title' => $item->getProductTitle(),
82
- 'products_listing_id' => $this->_productsListingId,
83
- 'product_id' => $item->getProductId(),
84
- 'message' => (is_array($this->_itemMessage)) ? $this->_jsonEncode($this->_itemMessage) : $this->_itemMessage,
85
- 'log_status' => $this->_itemStatus,
86
- 'log_type' => $this->_logType,
87
- 'created_at' => Mage::getSingleton('core/date')->gmtDate()
88
- ));
89
-
90
- /**
91
- * Save the current information of the process to allow live display via ajax call
92
- */
93
- $jobListing->saveCurrentJob(array(
94
- 'total_proceed' => ++$this->_totalProceed,
95
- 'total_success' => ($jobListing->getTotalSuccess() + $this->_totalSuccess),
96
- 'total_error' => ($jobListing->getTotalError() + $this->_totalError),
97
- 'last_item_id' => $item->getId()
98
- ));
99
-
100
- $this->_itemMessage = null;
101
- $this->_itemStatus = null;
102
- }
103
-
104
- if ($hasSuccess) {
105
- $listing = Mage::getModel('diglin_ricento/products_listing')->load($this->_productsListingId);
106
- $listing
107
- ->setStatus(Diglin_Ricento_Helper_Data::STATUS_LISTED)
108
- ->save();
109
- }
110
-
111
- return $this;
112
- }
113
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Diglin/Ricento/Model/Dispatcher/Stop.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -34,7 +34,7 @@ class Diglin_Ricento_Model_Dispatcher_Stop extends Diglin_Ricento_Model_Dispatch
34
 
35
  $stoppedArticle = null;
36
  $articleId = null;
37
- $hasSuccess = false;
38
 
39
  /**
40
  * Status of the collection must be the same as Diglin_Ricento_Model_Resource_Products_Listing_Item::countListedItems
@@ -52,43 +52,67 @@ class Diglin_Ricento_Model_Dispatcher_Stop extends Diglin_Ricento_Model_Dispatch
52
 
53
  /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
54
  foreach ($itemCollection->getItems() as $item) {
 
 
 
 
 
 
55
 
56
- try {
57
- // We skip stop article with configurable product as we push its associated products
58
- if ($item->getProduct()->isConfigurableType()) {
59
- $jobListing->saveCurrentJob(array(
60
- 'total_proceed' => ++$this->_totalProceed,
61
- 'last_item_id' => $item->getId()
62
- ));
63
- continue;
64
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- $stoppedArticle = $sell->stopArticle($item);
67
-
68
- if ($stoppedArticle) {
69
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
70
- $this->_itemMessage = array('success' => $this->_getHelper()->__('The product has been removed from ricardo.ch'));
71
- $hasSuccess = true;
72
- ++$this->_totalSuccess;
73
- $item->getResource()->saveCurrentItem($item->getId(), array('ricardo_article_id' => null, 'is_planned' => null, 'qty_inventory' => null, 'status' => Diglin_Ricento_Helper_Data::STATUS_STOPPED));
74
- } else {
75
- ++$this->_totalError;
76
- $this->_jobHasError = true;
77
- $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_ERROR;
78
- $this->_itemMessage = array('errors' => $this->_getHelper()->__('The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.'));
79
- // do not change the status of the item itself, the problem can be that the auction is still running and the article cannot be stopped
80
  }
81
- } catch (Exception $e) {
82
- $this->_handleException($e);
83
- $e = null;
84
- // keep going for the next item - no break
 
 
 
 
 
 
 
 
 
 
 
85
  }
86
 
87
  /**
88
  * Save item information and eventual error messages
89
  */
90
  $this->_getListingLog()->saveLog(array(
91
- 'job_id' => $job->getId(),
92
  'product_title' => $item->getProductTitle(),
93
  'products_listing_id' => $this->_productsListingId,
94
  'product_id' => $item->getProductId(),
@@ -101,10 +125,10 @@ class Diglin_Ricento_Model_Dispatcher_Stop extends Diglin_Ricento_Model_Dispatch
101
  /**
102
  * Save the current information of the process to allow live display via ajax call
103
  */
104
- $jobListing->saveCurrentJob(array(
105
  'total_proceed' => ++$this->_totalProceed,
106
- 'total_success' => ($jobListing->getTotalSuccess() + $this->_totalSuccess),
107
- 'total_error' => ($jobListing->getTotalError() + $this->_totalError),
108
  'last_item_id' => $item->getId()
109
  ));
110
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
34
 
35
  $stoppedArticle = null;
36
  $articleId = null;
37
+ $plannedArticles = $insertedArticles = $closedArticles = array();
38
 
39
  /**
40
  * Status of the collection must be the same as Diglin_Ricento_Model_Resource_Products_Listing_Item::countListedItems
52
 
53
  /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
54
  foreach ($itemCollection->getItems() as $item) {
55
+ if ($item->getIsPlanned()) {
56
+ $plannedArticles[] = $item->getRicardoArticleId();
57
+ } else {
58
+ $insertedArticles[] = $item->getRicardoArticleId();
59
+ }
60
+ }
61
 
62
+ try {
63
+ $closedArticles = $sell->stopArticles(array('planned' => $plannedArticles, 'live' => $insertedArticles));
64
+ } catch (Exception $e) {
65
+ $this->_handleException($e);
66
+ $e = null;
67
+ // keep going for the next item - no break
68
+ }
69
+
70
+ $this->_saveCurrentStatus($itemCollection, $closedArticles);
71
+
72
+ return $this;
73
+ }
74
+
75
+ /**
76
+ * @param Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection $itemCollection
77
+ * @param $stoppedArticles
78
+ * @return $this
79
+ * @throws Exception
80
+ */
81
+ protected function _saveCurrentStatus(Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection $itemCollection, $stoppedArticles)
82
+ {
83
+ $hasSuccess = false;
84
+ $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
85
 
86
+ /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
87
+ foreach ($itemCollection->getItems() as $item) {
88
+
89
+ $stoppedArticle = false;
90
+ foreach ($stoppedArticles as $stoppedArticle) {
91
+ if (isset($stoppedArticle['PlannedArticleId']) || isset($stoppedArticle['ArticleNr'])) {
92
+ break;
 
 
 
 
 
 
 
93
  }
94
+ $stoppedArticle = false;
95
+ }
96
+
97
+ if ($stoppedArticle) {
98
+ $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_SUCCESS;
99
+ $this->_itemMessage = array('success' => $this->_getHelper()->__('The product has been removed from ricardo.ch'));
100
+ $hasSuccess = true;
101
+ ++$this->_totalSuccess;
102
+ $itemResource->saveCurrentItem($item->getId(), array('ricardo_article_id' => null, 'is_planned' => null, 'qty_inventory' => null, 'status' => Diglin_Ricento_Helper_Data::STATUS_STOPPED));
103
+ } else {
104
+ ++$this->_totalError;
105
+ $this->_jobHasError = true;
106
+ $this->_itemStatus = Diglin_Ricento_Model_Products_Listing_Log::STATUS_ERROR;
107
+ $this->_itemMessage = array('errors' => $this->_getHelper()->__('The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.'));
108
+ // do not change the status of the item itself, the problem can be that the auction is still running and the article cannot be stopped
109
  }
110
 
111
  /**
112
  * Save item information and eventual error messages
113
  */
114
  $this->_getListingLog()->saveLog(array(
115
+ 'job_id' => $this->_currentJob->getId(),
116
  'product_title' => $item->getProductTitle(),
117
  'products_listing_id' => $this->_productsListingId,
118
  'product_id' => $item->getProductId(),
125
  /**
126
  * Save the current information of the process to allow live display via ajax call
127
  */
128
+ $this->_currentJobListing->saveCurrentJob(array(
129
  'total_proceed' => ++$this->_totalProceed,
130
+ 'total_success' => ($this->_totalSuccess),
131
+ 'total_error' => ($this->_totalError),
132
  'last_item_id' => $item->getId()
133
  ));
134
 
app/code/community/Diglin/Ricento/Model/Dispatcher/Sync/List.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Entity/Attribute/Source/Conditions.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Filter.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Observer.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -207,4 +207,18 @@ class Diglin_Ricento_Model_Observer
207
  }
208
  return $this;
209
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
207
  }
208
  return $this;
209
  }
210
+
211
+ /**
212
+ * Event
213
+ * - controller_action_layout_load_before
214
+ *
215
+ * @param Varien_Event_Observer $observer
216
+ */
217
+ public function addLayoutHandle(Varien_Event_Observer $observer)
218
+ {
219
+ $event = $observer->getEvent();
220
+ if (strpos($event->getAction()->getFullActionName(), 'ricento') !== false) {
221
+ $event->getLayout()->getUpdate()->addHandle('ricento');
222
+ }
223
+ }
224
  }
app/code/community/Diglin/Ricento/Model/Products/Category.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -14,11 +14,12 @@
14
  *
15
  * Represents a Ricardo category
16
  *
17
- * @method string getCategoryId() getCategoryId()
18
- * @method string getCategoryName() getCategoryName()
19
- * @method string getIsFinal() getIsFinal()
20
- * @method string getLevel() getLevel()
21
- * @method string getParentId() getParentId()
 
22
  */
23
  class Diglin_Ricento_Model_Products_Category extends Varien_Object
24
  {
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
14
  *
15
  * Represents a Ricardo category
16
  *
17
+ * @method string getCategoryId()
18
+ * @method string getCategoryName()
19
+ * @method string getIsFinal()
20
+ * @method string getLevel()
21
+ * @method string getParentId()
22
+ * @method string getPath()
23
  */
24
  class Diglin_Ricento_Model_Products_Category extends Varien_Object
25
  {
app/code/community/Diglin/Ricento/Model/Products/Category/Mapping.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -127,13 +127,18 @@ class Diglin_Ricento_Model_Products_Category_Mapping extends Varien_Object
127
  * Add category to index and tree
128
  *
129
  * @param Diglin_Ricento_Model_Products_Category $category
 
130
  */
131
  protected function _addCategoryToIndex(Diglin_Ricento_Model_Products_Category $category)
132
  {
133
  $this->_categoryIndex[$category->getId()] = $category;
134
  if ((int) $category->getLevel() > 0) {
135
- $this->_categoryIndex[$category->getParentId()]->addChild($category);
 
 
 
136
  }
 
137
  }
138
 
139
  /**
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
127
  * Add category to index and tree
128
  *
129
  * @param Diglin_Ricento_Model_Products_Category $category
130
+ * @return $this
131
  */
132
  protected function _addCategoryToIndex(Diglin_Ricento_Model_Products_Category $category)
133
  {
134
  $this->_categoryIndex[$category->getId()] = $category;
135
  if ((int) $category->getLevel() > 0) {
136
+ $parentCategory = $this->_categoryIndex[$category->getParentId()];
137
+ $path = ($parentCategory->getPath()) ? $parentCategory->getPath() . '/' . $parentCategory->getCategoryId() : $parentCategory->getCategoryId();
138
+ $category->setPath($path . '/' . $category->getCategoryId());
139
+ $parentCategory->addChild($category);
140
  }
141
+ return $this;
142
  }
143
 
144
  /**
app/code/community/Diglin/Ricento/Model/Products/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -84,13 +84,6 @@ class Diglin_Ricento_Model_Products_Listing extends Mage_Core_Model_Abstract
84
 
85
  // Be aware doing that doesn't trigger Magento events but it's faster
86
  $this->getProductsListingItemCollection()->updateStatusToAll(Diglin_Ricento_Helper_Data::STATUS_PENDING);
87
-
88
- // Delete configurable product children, will be recreated when the check list process is done
89
- Mage::getResourceModel('diglin_ricento/products_listing_item_collection')
90
- ->addFieldToFilter('products_listing_id', $this->getId())
91
- ->addFieldToFilter('parent_item_id', array('notnull' => 1))
92
- ->addFieldToFilter('ricardo_article_id', array('null' => 1))
93
- ->walk('delete');
94
  }
95
 
96
  $this->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate());
@@ -109,7 +102,7 @@ class Diglin_Ricento_Model_Products_Listing extends Mage_Core_Model_Abstract
109
  {
110
  parent::_beforeDelete();
111
 
112
- // We must not use the FK constrains cause of deletion of other values at item level
113
  $this->getProductsListingItemCollection()->walk('delete');
114
  return $this;
115
  }
@@ -163,81 +156,43 @@ class Diglin_Ricento_Model_Products_Listing extends Mage_Core_Model_Abstract
163
  */
164
  public function addProduct($productId)
165
  {
166
- if (Mage::getResourceModel('catalog/product_collection')->addFieldToFilter('entity_id', $productId)->getSize()) {
 
 
 
 
 
 
 
 
167
  /** @var $productListingItem Diglin_Ricento_Model_Products_Listing_Item */
168
  $productListingItem = Mage::getModel('diglin_ricento/products_listing_item');
169
- $productListingItem->setProductsListingId($this->getId())->setProductId($productId)->save();
 
 
 
 
170
  return true;
171
  }
172
  return false;
173
  }
174
 
175
  /**
176
- * Removes items by product id
177
- *
178
  * @param array $productIds
179
- * @return int[] Returns two values: [number of removed products, number of not removed listed products]
180
  */
181
  public function removeProductsByProductIds(array $productIds)
182
  {
183
- /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
184
- $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
185
-
186
- /** @var $itemResource Diglin_Ricento_Model_Resource_Products_Listing_Item */
187
- $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
188
- $itemResource->beginTransaction();
189
-
190
- $numberOfListedItems = $items->addFieldToFilter('products_listing_id', $this->getId())
191
- ->addFieldToFilter('product_id', array('in' => $productIds))
192
- ->addFieldToFilter('status', Diglin_Ricento_Helper_Data::STATUS_LISTED)
193
- ->getSize();
194
-
195
- $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
196
- $numberOfItemsToDelete = $items->addFieldToFilter('products_listing_id', $this->getId())
197
- ->addFieldToFilter('product_id', array('in' => $productIds))
198
- ->addFieldToFilter('status', array('neq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
199
- ->count();
200
-
201
- if ($numberOfItemsToDelete) {
202
- $items->walk('delete');
203
- }
204
-
205
- $itemResource->commit();
206
- return array($numberOfItemsToDelete, $numberOfListedItems);
207
  }
208
 
209
  /**
210
- * Removes items by item id
211
- *
212
- * @param array $itemIds
213
- * @return int[] Returns two values: [number of removed products, number of not removed listed products]
214
  */
215
- public function removeProductsByItemIds(array $itemIds)
216
  {
217
- /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
218
- $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
219
-
220
- /** @var $itemResource Diglin_Ricento_Model_Resource_Products_Listing_Item */
221
- $itemResource = Mage::getResourceModel('diglin_ricento/products_listing_item');
222
- $itemResource->beginTransaction();
223
-
224
- $numberOfListedItems = $items->addFieldToFilter('products_listing_id', $this->getId())
225
- ->addFieldToFilter('item_id', array('in' => $itemIds))
226
- ->addFieldToFilter('status', Diglin_Ricento_Helper_Data::STATUS_LISTED)
227
- ->getSize();
228
-
229
- $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
230
- $numberOfItemsToDelete = $items->addFieldToFilter('products_listing_id', $this->getId())
231
- ->addFieldToFilter('item_id', array('in' => $itemIds))
232
- ->addFieldToFilter('status', array('neq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
233
- ->count();
234
-
235
- if ($numberOfItemsToDelete) {
236
- $items->walk('delete');
237
- }
238
-
239
- $itemResource->commit();
240
- return array($numberOfItemsToDelete, $numberOfListedItems);
241
  }
242
 
243
  /**
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
84
 
85
  // Be aware doing that doesn't trigger Magento events but it's faster
86
  $this->getProductsListingItemCollection()->updateStatusToAll(Diglin_Ricento_Helper_Data::STATUS_PENDING);
 
 
 
 
 
 
 
87
  }
88
 
89
  $this->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate());
102
  {
103
  parent::_beforeDelete();
104
 
105
+ // We must not use the FK constrains cause of the need to delete other values at item level
106
  $this->getProductsListingItemCollection()->walk('delete');
107
  return $this;
108
  }
156
  */
157
  public function addProduct($productId)
158
  {
159
+ $readConnection = $this->getResource()->getReadConnection();
160
+ $select = $readConnection
161
+ ->select()
162
+ ->from($this->getResource()->getTable('catalog/product'), array('entity_id', 'type_id'))
163
+ ->where('entity_id = ?', $productId);
164
+
165
+ $productTable = $readConnection->fetchRow($select);
166
+
167
+ if (count($productTable)) {
168
  /** @var $productListingItem Diglin_Ricento_Model_Products_Listing_Item */
169
  $productListingItem = Mage::getModel('diglin_ricento/products_listing_item');
170
+ $productListingItem
171
+ ->setProductsListingId($this->getId())
172
+ ->setProductId($productId)
173
+ ->setType($productTable['type_id'])
174
+ ->save();
175
  return true;
176
  }
177
  return false;
178
  }
179
 
180
  /**
 
 
181
  * @param array $productIds
182
+ * @return int[]
183
  */
184
  public function removeProductsByProductIds(array $productIds)
185
  {
186
+ return $this->getResource()->removeProductsByProductIds($productIds, $this->getId());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
 
189
  /**
190
+ * @param array $productIds
191
+ * @return int[]
 
 
192
  */
193
+ public function removeProductsByItemIds(array $productIds)
194
  {
195
+ return $this->getResource()->removeProductsByItemIds($productIds, $this->getId());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  }
197
 
198
  /**
app/code/community/Diglin/Ricento/Model/Products/Listing/Item.php CHANGED
@@ -5,13 +5,12 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  use Diglin\Ricardo\Core\Helper;
13
  use Diglin\Ricardo\Enums\Article\InternalReferenceType;
14
- use Diglin\Ricardo\Enums\Article\PromotionCode;
15
  use Diglin\Ricardo\Enums\PictureExtension;
16
  use Diglin\Ricardo\Enums\System\CategoryBrandingFilter;
17
  use Diglin\Ricardo\Managers\Sell\Parameter\ArticleDeliveryParameter;
@@ -22,11 +21,14 @@ use Diglin\Ricardo\Managers\Sell\Parameter\ArticlePictureParameter;
22
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
23
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticleParameter;
24
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
 
 
25
 
26
  /**
27
  * Products_Listing_Item Model
28
  *
29
  * @method int getProductId()
 
30
  * @method int getParentItemId()
31
  * @method int getParentProductId()
32
  * @method int getRicardoArticleId()
@@ -40,9 +42,9 @@ use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
40
  * @method DateTime getUpdatedAt()
41
  * @method bool getReload()
42
  * @method int getStoreId()
43
- * @method int getDefaultStoreId()
44
  * @method bool getLoadFallbackOptions()
45
  * @method Diglin_Ricento_Model_Products_Listing_Item setProductId(int $productId)
 
46
  * @method Diglin_Ricento_Model_Products_Listing_Item setParentItemId(int $parentItemId)
47
  * @method Diglin_Ricento_Model_Products_Listing_Item setParentProductId(int $parentProductId)
48
  * @method Diglin_Ricento_Model_Products_Listing_Item setRicardoArticleId(int $ricardoArticleId)
@@ -57,7 +59,7 @@ use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
57
  * @method Diglin_Ricento_Model_Products_Listing_Item setUpdatedAt(DateTime $updatedAt)
58
  * @method Diglin_Ricento_Model_Products_Listing_Item setReload(bool $reload)
59
  * @method Diglin_Ricento_Model_Products_Listing_Item setStoreId(int $storeId)
60
- * @method Diglin_Ricento_Model_Products_Listing_Item setDefaultStoreId(int $storeId)
61
  * @method Diglin_Ricento_Model_Products_Listing_Item setLoadFallbackOptions(bool $loadFallbackOptions)
62
  */
63
  class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstract
@@ -95,6 +97,11 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
95
  */
96
  protected $_itemProduct;
97
 
 
 
 
 
 
98
  /**
99
  * Products_Listing_Item Constructor
100
  * @return void
@@ -112,30 +119,50 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
112
  {
113
  parent::_beforeSave();
114
 
115
- if ($this->hasDataChanges() && $this->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED) {
116
- if (!$this->getParentProductId()) {
117
- $this->setStatus(Diglin_Ricento_Helper_Data::STATUS_PENDING);
118
-
119
- if ($this->getId()) {
120
- // Delete configurable product children, will be recreated when the check list process is done
121
- $this->getCollection()
122
- ->addFieldToFilter('products_listing_id', $this->getProductsListingId())
123
- ->addFieldToFilter('parent_item_id', $this->getId())
124
- ->addFieldToFilter('ricardo_article_id', array('null' => 1))
125
- ->walk('delete');
126
- }
127
- }
128
  }
129
 
130
- $this->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate());
 
 
 
 
 
131
 
132
  if ($this->isObjectNew()) {
133
- $this->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
134
  }
135
 
136
  return $this;
137
  }
138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  /**
140
  * @return $this|Mage_Core_Model_Abstract
141
  */
@@ -153,6 +180,15 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
153
  return $this;
154
  }
155
 
 
 
 
 
 
 
 
 
 
156
  /**
157
  * @return Diglin_Ricento_Model_Products_Listing_Item_Product
158
  */
@@ -241,7 +277,7 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
241
  }
242
  }
243
 
244
- return (int) $ricardoCategoryId;
245
  }
246
 
247
  /**
@@ -299,30 +335,33 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
299
  public function getProductDescription($sub = true)
300
  {
301
  $description = $this->getProduct()->getDescription($this->getBaseProductId(), $this->getStoreId(), $sub);
 
302
 
303
- return strip_tags(nl2br($description), implode('', Mage::helper('diglin_ricento')->getAllowedTags()));
304
  }
305
 
306
  /**
 
 
307
  * @return float
308
  */
309
- public function getProductPrice()
310
  {
311
- // We take the price from default store view
312
- $productPrice = $this->getProduct()
313
- ->setProductId($this->getBaseProductId())
314
- ->setStoreId($this->getDefaultStoreId())
315
- ->getPrice();
316
-
317
- // if child of configurable add the product variation depending on the options (options are ordered by position normally)
318
  if ($this->getParentProductId()) {
319
  foreach ($this->getAdditionalData()->getOptions() as $option) {
320
  if (isset($option['pricing_value'])) {
321
- $productPrice += Mage::helper('diglin_ricento/price')->calcSelectionPrice($option, $productPrice);
322
  }
323
  }
324
  }
325
 
 
 
 
 
 
 
326
  return $productPrice;
327
  }
328
 
@@ -331,13 +370,24 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
331
  */
332
  public function getProductQty()
333
  {
334
- if ($this->getSalesOptions()->getStockManagement() == -1) {
335
- // In case a product belongs to a configurable product
336
- if ($this->getParentProductId()) {
337
- return $this->getAdditionalData()->getStockQty();
 
 
 
 
 
 
 
 
 
338
  }
339
 
340
- return $this->getProduct()->getQty();
 
 
341
  } else {
342
  return $this->getSalesOptions()->getStockManagement();
343
  }
@@ -356,9 +406,7 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
356
  */
357
  public function getProductCondition()
358
  {
359
- $salesOptions = $this->getSalesOptions();
360
- $sourceCondition = $salesOptions->getProductConditionSourceAttributeCode();
361
-
362
  if (!empty($sourceCondition)) {
363
  $condition = $this->getProduct()->getCondition($this->getBaseProductId());
364
  if (!empty($condition)) {
@@ -366,7 +414,7 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
366
  }
367
  }
368
 
369
- return $salesOptions->getProductCondition();
370
  }
371
 
372
  /**
@@ -379,38 +427,52 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
379
 
380
  /**
381
  * Define a list of store IDs for each supported and expected language
382
- * Define a default one in case of accept all languages
383
  *
384
  * @return array
385
  */
386
  protected function _prepareStoresLanguage()
387
  {
388
- // Prepare language and store id for each language
389
- $storesLang = array();
390
- $defaultLang = null;
391
- $publishLanguages = $this->getProductsListing()->getPublishLanguages();
392
-
393
- if ($publishLanguages == 'all') {
394
- $languages = Mage::helper('diglin_ricento')->getSupportedLang();
395
- $defaultLang = $this->getProductsListing()->getDefaultLanguage();
396
- foreach ($languages as $language) {
397
- $method = 'getLangStoreId' . ucwords($language);
398
- $storesLang[$language] = $this->$method();
399
- if ($defaultLang == $language) {
400
- $this->setDefaultStoreId($storesLang[$language]);
401
  }
 
 
 
402
  }
403
- } else {
404
- $method = 'getLangStoreId' . ucwords($publishLanguages);
405
- $storesLang[$publishLanguages] = $this->$method();
406
  }
407
 
408
- return $storesLang;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  }
410
 
411
  /**
412
  * Prepare the InsertArticle Parameter
413
  *
 
414
  * @return InsertArticleParameter
415
  */
416
  public function getInsertArticleParameter()
@@ -431,31 +493,87 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
431
 
432
  //** Article Images
433
 
434
- $helper = Mage::helper('diglin_ricento');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
435
  $images = (array) $this->getProduct()->getImages($this->getBaseProductId());
436
  $i = 0;
437
  $hash = array();
438
 
439
  foreach ($images as $image) {
440
 
441
- if ($i >= 8) { break; }; // Do not set more than 9 pictures
 
 
442
 
443
  $hashImage = md5($image['filepath']);
444
- if (isset($image['filepath']) && file_exists($image['filepath']) && !isset($hash[$hashImage])) {
445
 
446
- if (!$helper->checkMemory($image['filepath'])) {
447
- Mage::log(Mage::helper('diglin_ricento')->__('Image insertion skipped for memory protection: %s', $image['filepath']), Zend_Log::DEBUG, Diglin_Ricento_Helper_Data::LOG_FILE, true);
448
- break;
449
- }
 
 
 
450
 
451
  // Prepare picture to set the content as byte array for the webservice
452
- $imageExtension = Helper::getPictureExtension($image['filepath']);
453
-
454
  if ($imageExtension) {
455
  $picture = new ArticlePictureParameter();
456
  $picture
457
  // we encode in Json to minimize memory consumption
458
- ->setPictureBytes(json_encode(array_values(unpack('C*', file_get_contents($image['filepath'])))))
459
  ->setPictureExtension($imageExtension)
460
  ->setPictureIndex(++$i);
461
 
@@ -467,12 +585,7 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
467
  }
468
  }
469
 
470
- $insertArticleParameter
471
- ->setAntiforgeryToken($this->_getAntiforgeryToken())
472
- ->setArticleInformation($this->_getArticleInformationParameter())
473
- ->setIsUpdateArticle(false);
474
-
475
- return $insertArticleParameter;
476
  }
477
 
478
  /**
@@ -525,38 +638,30 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
525
  */
526
  protected function _getArticleInformationParameter()
527
  {
528
- $promotionIds = array();
529
  $paymentConditions = array();
530
-
531
- $paymentMethods = (array) $this->_shippingPaymentRule->getPaymentMethods();
532
- $salesType = $this->_salesOptions->getSalesType();
533
 
534
  foreach ($paymentMethods as $paymentMethod) {
535
  $paymentConditions[] = $this->_getPaymentConditionId($paymentMethod);
536
  }
537
 
538
- if ($this->_salesOptions->getScheduleOverwriteProductDateStart()) {
539
- $startDate = $this->getProductsListing()->getSalesOptions()->getScheduleDateStart();
540
- } else {
541
- $startDate = $this->_salesOptions->getScheduleDateStart();
542
- }
543
-
544
- $untilSoldOut = ((int) $this->_salesOptions->getScheduleReactivation() === Diglin_Ricento_Model_Config_Source_Sales_Reactivation::SOLDOUT);
545
-
546
- $customTemplate = ($this->_salesOptions->getCustomizationTemplate() >= 0) ? $this->_salesOptions->getCustomizationTemplate() : null;
547
 
548
  $articleInformation = new ArticleInformationParameter();
549
  $articleInformation
550
  // required
551
  ->setArticleConditionId($this->getProductCondition())
552
- ->setArticleDuration(($this->_salesOptions->getSchedulePeriodDays() * 24 * 60)) // In minutes
553
  ->setAvailabilityId($this->_shippingPaymentRule->getShippingAvailability())
554
  ->setCategoryId($this->getCategory())
555
  ->setInitialQuantity($this->getProductQty())
556
  ->setIsCustomerTemplate(((!is_null($customTemplate)) ? true : false))
557
  ->setMainPictureId(1)
558
- ->setMaxRelistCount((!$untilSoldOut) ? $this->_salesOptions->getScheduleReactivation() : 0)
559
- ->setWarrantyId($this->_salesOptions->getProductWarranty())
560
  ->setDeliveries($this->_getArticleDeliveryParameter())
561
  // optional
562
  ->setInternalReferences($this->_getInternalReferencesParameter())
@@ -567,28 +672,17 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
567
  /**
568
  * Start Date is mandatory for auction but optional for buy now sales type
569
  */
570
- if (!is_null($startDate) || $salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
571
- $startDate = strtotime($startDate);
572
-
573
- // ricardo.ch constrains, starting date must be in 1 hour after now
574
- if ($startDate < (time() + 60*60)) {
575
- $startDate = time() + 60*60;
576
- }
577
-
578
- $articleInformation->setStartDate(Mage::helper('diglin_ricento')->getJsonDate($startDate));
579
- }
580
 
581
  if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
582
  $articleInformation
583
- ->setIncrement($this->_salesOptions->getSalesAuctionIncrement())
584
- ->setStartPrice($this->_salesOptions->getSalesAuctionStartPrice());
585
-
586
- if ($this->_salesOptions->getSalesAuctionDirectBuy()) {
587
- $promotionIds[] = PromotionCode::BUYNOW;
588
- }
589
  }
590
 
591
- if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::BUYNOW || $this->_salesOptions->getSalesAuctionDirectBuy()) {
 
 
592
  $articleInformation->setBuyNowPrice($this->getProductPrice());
593
  }
594
 
@@ -596,24 +690,14 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
596
  $articleInformation->setIsRelistSoldOut($untilSoldOut);
597
  }
598
 
599
- //** Promotions
600
-
601
- $space = $this->_salesOptions->getPromotionSpace();
602
- if ($space) {
603
- $promotionIds[] = (int) $space;
604
- }
605
-
606
- $startSpace = $this->_salesOptions->getPromotionStartPage();
607
- if ($startSpace) {
608
- $promotionIds[] = (int) $startSpace;
609
- }
610
-
611
  // required
612
- $articleInformation->setPromotionIds($promotionIds);
613
 
614
  return $articleInformation;
615
  }
616
 
 
 
617
  /**
618
  * Prepare Article Description Parameter
619
  *
@@ -644,14 +728,14 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
644
  */
645
  protected function _getPaymentConditionId($paymentMethod)
646
  {
647
- $system = Mage::getSingleton('diglin_ricento/api_services_system');
648
- $conditions = (array) $system->getPaymentConditionsAndMethods();
649
 
650
  foreach ($conditions as $condition) {
651
  if (isset($condition['PaymentMethods']) && !empty($condition['PaymentMethods'])) {
652
  foreach ($condition['PaymentMethods'] as $method) {
653
- if (isset($method['PaymentMethodId']) && $method['PaymentMethodId'] == (int) $paymentMethod) {
654
- return (int) $condition['PaymentConditionId'];
655
  }
656
  }
657
  }
@@ -699,10 +783,7 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
699
  */
700
  protected function _getAntiforgeryToken()
701
  {
702
- return Mage::getSingleton('diglin_ricento/api_services_security')
703
- ->setCurrentWebsite($this->getProductsListing()->getWebsiteId())
704
- ->getServiceModel()
705
- ->getAntiforgeryToken();
706
  }
707
 
708
  /**
@@ -718,4 +799,37 @@ class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstrac
718
  }
719
  return array();
720
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
721
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
  use Diglin\Ricardo\Core\Helper;
13
  use Diglin\Ricardo\Enums\Article\InternalReferenceType;
 
14
  use Diglin\Ricardo\Enums\PictureExtension;
15
  use Diglin\Ricardo\Enums\System\CategoryBrandingFilter;
16
  use Diglin\Ricardo\Managers\Sell\Parameter\ArticleDeliveryParameter;
21
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
22
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticleParameter;
23
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
24
+ use Diglin\Ricardo\Managers\Sell\Parameter\GetArticleFeeParameter;
25
+ use Diglin\Ricardo\Managers\Sell\Parameter\BaseInsertArticleWithTrackingParameter;
26
 
27
  /**
28
  * Products_Listing_Item Model
29
  *
30
  * @method int getProductId()
31
+ * @method string getType()
32
  * @method int getParentItemId()
33
  * @method int getParentProductId()
34
  * @method int getRicardoArticleId()
42
  * @method DateTime getUpdatedAt()
43
  * @method bool getReload()
44
  * @method int getStoreId()
 
45
  * @method bool getLoadFallbackOptions()
46
  * @method Diglin_Ricento_Model_Products_Listing_Item setProductId(int $productId)
47
+ * @method Diglin_Ricento_Model_Products_Listing_Item setType(string $type)
48
  * @method Diglin_Ricento_Model_Products_Listing_Item setParentItemId(int $parentItemId)
49
  * @method Diglin_Ricento_Model_Products_Listing_Item setParentProductId(int $parentProductId)
50
  * @method Diglin_Ricento_Model_Products_Listing_Item setRicardoArticleId(int $ricardoArticleId)
59
  * @method Diglin_Ricento_Model_Products_Listing_Item setUpdatedAt(DateTime $updatedAt)
60
  * @method Diglin_Ricento_Model_Products_Listing_Item setReload(bool $reload)
61
  * @method Diglin_Ricento_Model_Products_Listing_Item setStoreId(int $storeId)
62
+ * @method Diglin_Ricento_Model_Products_Listing_Item setDefaultStoreId(int $defaultStoreId)
63
  * @method Diglin_Ricento_Model_Products_Listing_Item setLoadFallbackOptions(bool $loadFallbackOptions)
64
  */
65
  class Diglin_Ricento_Model_Products_Listing_Item extends Mage_Core_Model_Abstract
97
  */
98
  protected $_itemProduct;
99
 
100
+ /**
101
+ * @var array
102
+ */
103
+ protected $_storesLang = array();
104
+
105
  /**
106
  * Products_Listing_Item Constructor
107
  * @return void
119
  {
120
  parent::_beforeSave();
121
 
122
+ if ($this->hasDataChanges() && !$this->dataHasChangedFor('status')
123
+ && $this->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED
124
+ ) {
125
+ $this->setStatus(Diglin_Ricento_Helper_Data::STATUS_PENDING);
 
 
 
 
 
 
 
 
 
126
  }
127
 
128
+ if ($this->getType() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
129
+ $this->setStatus('');
130
+ }
131
+
132
+ $gmtDate = Mage::getSingleton('core/date')->gmtDate();
133
+ $this->setUpdatedAt($gmtDate);
134
 
135
  if ($this->isObjectNew()) {
136
+ $this->setCreatedAt($gmtDate);
137
  }
138
 
139
  return $this;
140
  }
141
 
142
+ /**
143
+ * @return Mage_Core_Model_Abstract
144
+ * @throws Exception
145
+ */
146
+ protected function _afterSave()
147
+ {
148
+ if ($this->hasDataChanges() && $this->getType() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
149
+ $childCollection = $this->getCollection()
150
+ ->addFieldToFilter('products_listing_id', $this->getProductsListingId())
151
+ ->addFieldToFilter('parent_item_id', $this->getId())
152
+ ->addFieldToFilter('ricardo_article_id', array('null' => 1));
153
+
154
+ /* @var $child Diglin_Ricento_Model_Products_Listing_Item */
155
+ foreach ($childCollection->getItems() as $child) {
156
+ $child
157
+ ->setRuleId($this->getRuleId())
158
+ ->setSalesOptionsId($this->getSalesOptionsId())
159
+ ->save();
160
+ }
161
+ }
162
+
163
+ return parent::_afterSave();
164
+ }
165
+
166
  /**
167
  * @return $this|Mage_Core_Model_Abstract
168
  */
180
  return $this;
181
  }
182
 
183
+ /**
184
+ * @return mixed
185
+ */
186
+ public function getDefaultStoreId()
187
+ {
188
+ $this->_prepareStoresLanguage();
189
+ return $this->getData('default_store_id');
190
+ }
191
+
192
  /**
193
  * @return Diglin_Ricento_Model_Products_Listing_Item_Product
194
  */
277
  }
278
  }
279
 
280
+ return (int)$ricardoCategoryId;
281
  }
282
 
283
  /**
335
  public function getProductDescription($sub = true)
336
  {
337
  $description = $this->getProduct()->getDescription($this->getBaseProductId(), $this->getStoreId(), $sub);
338
+ $description = (Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_NL2BR)) ? nl2br($description) : $description;
339
 
340
+ return strip_tags($description, implode('', Mage::helper('diglin_ricento')->getAllowedTags()));
341
  }
342
 
343
  /**
344
+ * Return the product price in CHF
345
+ *
346
  * @return float
347
  */
348
+ public function getProductPrice($convert = true)
349
  {
350
+ $priceOptions = array();
 
 
 
 
 
 
351
  if ($this->getParentProductId()) {
352
  foreach ($this->getAdditionalData()->getOptions() as $option) {
353
  if (isset($option['pricing_value'])) {
354
+ $priceOptions[] = $option;
355
  }
356
  }
357
  }
358
 
359
+ // We take the price from default store view of the current Product Listing Website and parent product if relevant
360
+ $productPrice = $this->getProduct()
361
+ ->setStoreId($this->getDefaultStoreId())
362
+ ->setPriceOptions($priceOptions)
363
+ ->getPrice($convert);
364
+
365
  return $productPrice;
366
  }
367
 
370
  */
371
  public function getProductQty()
372
  {
373
+ $qtyMax = Diglin_Ricento_Model_Validate_Products_Item::QTY_MAX;
374
+
375
+ if ($this->getSalesOptions()->getStockManagement() == -1
376
+ || $this->getSalesOptions()->getStockManagementQtyType() == Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_PERCENT) {
377
+
378
+ $qty = $this->getProduct()->getQty();
379
+
380
+ if ($qty <= 0) {
381
+ return 0;
382
+ }
383
+
384
+ if ($this->getSalesOptions()->getStockManagement() == -1) {
385
+ return ($qty > $qtyMax) ? $qtyMax : $qty;
386
  }
387
 
388
+ $qty = $this->getProduct()->getPercentQty($qty, $this->getSalesOptions()->getStockManagement(), Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_PERCENT);
389
+
390
+ return ($qty > $qtyMax) ? $qtyMax : $qty;
391
  } else {
392
  return $this->getSalesOptions()->getStockManagement();
393
  }
406
  */
407
  public function getProductCondition()
408
  {
409
+ $sourceCondition = $this->getSalesOptions()->getProductConditionSourceAttributeCode();
 
 
410
  if (!empty($sourceCondition)) {
411
  $condition = $this->getProduct()->getCondition($this->getBaseProductId());
412
  if (!empty($condition)) {
414
  }
415
  }
416
 
417
+ return $this->getSalesOptions()->getProductCondition();
418
  }
419
 
420
  /**
427
 
428
  /**
429
  * Define a list of store IDs for each supported and expected language
 
430
  *
431
  * @return array
432
  */
433
  protected function _prepareStoresLanguage()
434
  {
435
+ if (!$this->_storesLang) {
436
+ $defaultLang = null;
437
+ $publishLanguages = $this->getProductsListing()->getPublishLanguages();
438
+
439
+ if ($publishLanguages == 'all') {
440
+ $languages = Mage::helper('diglin_ricento')->getSupportedLang();
441
+ $defaultLang = $this->getProductsListing()->getDefaultLanguage();
442
+ foreach ($languages as $language) {
443
+ $this->_storesLang[$language] = $this->getLangStoreId($language);
444
+ if ($defaultLang == $language) {
445
+ $this->setDefaultStoreId($this->_storesLang[$language]);
446
+ }
 
447
  }
448
+ } else {
449
+ $this->_storesLang[$publishLanguages] = $this->getLangStoreId($publishLanguages);
450
+ $this->setDefaultStoreId($this->_storesLang[$publishLanguages]);
451
  }
 
 
 
452
  }
453
 
454
+ return $this->_storesLang;
455
+ }
456
+
457
+ /**
458
+ * @param string $language
459
+ * @return int
460
+ * @throws Mage_Core_Exception
461
+ */
462
+ public function getLangStoreId($language)
463
+ {
464
+ $method = 'getLangStoreId' . ucwords($language);
465
+ $storeId = $this->getProductsListing()->$method();
466
+ if (is_null($storeId)) {
467
+ $storeId = Mage::app()->getWebsite($this->getProductsListing()->getWebsiteId())->getDefaultStore()->getId();
468
+ }
469
+ return (int) $storeId;
470
  }
471
 
472
  /**
473
  * Prepare the InsertArticle Parameter
474
  *
475
+ * @deprecated
476
  * @return InsertArticleParameter
477
  */
478
  public function getInsertArticleParameter()
493
 
494
  //** Article Images
495
 
496
+ $this->_setInsertArticlePictures($insertArticleParameter);
497
+
498
+ $insertArticleParameter
499
+ ->setAntiforgeryToken($this->_getAntiforgeryToken())
500
+ ->setArticleInformation($this->_getArticleInformationParameter())
501
+ ->setIsUpdateArticle(false);
502
+
503
+ $this->setLoadFallbackOptions(false);
504
+
505
+ return $insertArticleParameter;
506
+ }
507
+
508
+ /**
509
+ * Prepare the InsertArticle Parameter
510
+ *
511
+ * @return BaseInsertArticleWithTrackingParameter
512
+ */
513
+ public function getBaseInsertArticleWithTracking()
514
+ {
515
+ $baseInsert = new BaseInsertArticleWithTrackingParameter();
516
+
517
+ $this->setLoadFallbackOptions(true);
518
+
519
+ $this->_shippingPaymentRule = $this->getShippingPaymentRule();
520
+ $this->_salesOptions = $this->getSalesOptions();
521
+
522
+ //** Article Description
523
+
524
+ foreach ($this->_prepareStoresLanguage() as $language => $storeId) {
525
+ $this->setStoreId($storeId);
526
+ $baseInsert->setDescriptions($this->_getArticleDescriptionsParameter($language));
527
+ }
528
+
529
+ //** Article Images
530
+
531
+ $this->_setInsertArticlePictures($baseInsert);
532
+
533
+ $baseInsert
534
+ ->setArticleInformation($this->_getArticleInformationParameter())
535
+ ->setIsUpdateArticle(false)
536
+ ->setCorrelationKey(Helper::guid());
537
+
538
+ $this->setLoadFallbackOptions(false);
539
+
540
+ return $baseInsert;
541
+ }
542
+
543
+ /**
544
+ * @param InsertArticleParameter $insertArticleParameter
545
+ * @return $this
546
+ */
547
+ protected function _setInsertArticlePictures(InsertArticleParameter $insertArticleParameter)
548
+ {
549
  $images = (array) $this->getProduct()->getImages($this->getBaseProductId());
550
  $i = 0;
551
  $hash = array();
552
 
553
  foreach ($images as $image) {
554
 
555
+ if ($i >= 10) {
556
+ break;
557
+ }; // Do not set more than 10 pictures
558
 
559
  $hashImage = md5($image['filepath']);
560
+ if (isset($image['filepath']) && !isset($hash[$hashImage])) {
561
 
562
+ $imageHelper = Mage::helper('diglin_ricento/image');
563
+ $imageHelper
564
+ ->init(new Mage_Catalog_Model_Product(), 'image', $image['filepath'])
565
+ ->keepAspectRatio(true)
566
+ ->keepFrame(false)
567
+ ->setQuality(90)
568
+ ->resize(600);
569
 
570
  // Prepare picture to set the content as byte array for the webservice
571
+ $imageExtension = Helper::getPictureExtension($imageHelper);
 
572
  if ($imageExtension) {
573
  $picture = new ArticlePictureParameter();
574
  $picture
575
  // we encode in Json to minimize memory consumption
576
+ ->setPictureBytes(json_encode(array_values(unpack('C*', file_get_contents($imageHelper)))))
577
  ->setPictureExtension($imageExtension)
578
  ->setPictureIndex(++$i);
579
 
585
  }
586
  }
587
 
588
+ return $this;
 
 
 
 
 
589
  }
590
 
591
  /**
638
  */
639
  protected function _getArticleInformationParameter()
640
  {
641
+ $helper = Mage::helper('diglin_ricento');
642
  $paymentConditions = array();
643
+ $paymentMethods = (array)$this->_shippingPaymentRule->getPaymentMethods();
644
+ $salesType = $this->getSalesOptions()->getSalesType();
 
645
 
646
  foreach ($paymentMethods as $paymentMethod) {
647
  $paymentConditions[] = $this->_getPaymentConditionId($paymentMethod);
648
  }
649
 
650
+ $untilSoldOut = ((int)$this->getSalesOptions()->getScheduleReactivation() === Diglin_Ricento_Model_Config_Source_Sales_Reactivation::SOLDOUT);
651
+ $customTemplate = ($this->getSalesOptions()->getCustomizationTemplate() >= 0) ? $this->getSalesOptions()->getCustomizationTemplate() : null;
 
 
 
 
 
 
 
652
 
653
  $articleInformation = new ArticleInformationParameter();
654
  $articleInformation
655
  // required
656
  ->setArticleConditionId($this->getProductCondition())
657
+ ->setArticleDuration(($this->getSalesOptions()->getSchedulePeriodDays() * 24 * 60)) // In minutes
658
  ->setAvailabilityId($this->_shippingPaymentRule->getShippingAvailability())
659
  ->setCategoryId($this->getCategory())
660
  ->setInitialQuantity($this->getProductQty())
661
  ->setIsCustomerTemplate(((!is_null($customTemplate)) ? true : false))
662
  ->setMainPictureId(1)
663
+ ->setMaxRelistCount((!$untilSoldOut) ? $this->getSalesOptions()->getScheduleReactivation() : 0)
664
+ ->setWarrantyId($this->getSalesOptions()->getProductWarranty())
665
  ->setDeliveries($this->_getArticleDeliveryParameter())
666
  // optional
667
  ->setInternalReferences($this->_getInternalReferencesParameter())
672
  /**
673
  * Start Date is mandatory for auction but optional for buy now sales type
674
  */
675
+ $articleInformation->setStartDate($helper->getJsonDate($helper->getStartingDate($this)));
 
 
 
 
 
 
 
 
 
676
 
677
  if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
678
  $articleInformation
679
+ ->setIncrement($this->getSalesOptions()->getSalesAuctionIncrement())
680
+ ->setStartPrice($this->getSalesOptions()->getSalesAuctionStartPrice());
 
 
 
 
681
  }
682
 
683
+ if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::BUYNOW
684
+ || $this->getSalesOptions()->getSalesAuctionDirectBuy()
685
+ ) {
686
  $articleInformation->setBuyNowPrice($this->getProductPrice());
687
  }
688
 
690
  $articleInformation->setIsRelistSoldOut($untilSoldOut);
691
  }
692
 
 
 
 
 
 
 
 
 
 
 
 
 
693
  // required
694
+ $articleInformation->setPromotionIds($this->getSalesOptions()->getPromotionIds());
695
 
696
  return $articleInformation;
697
  }
698
 
699
+
700
+
701
  /**
702
  * Prepare Article Description Parameter
703
  *
728
  */
729
  protected function _getPaymentConditionId($paymentMethod)
730
  {
731
+ $conditions = (array) Mage::getSingleton('diglin_ricento/api_services_system')
732
+ ->getPaymentConditionsAndMethods();
733
 
734
  foreach ($conditions as $condition) {
735
  if (isset($condition['PaymentMethods']) && !empty($condition['PaymentMethods'])) {
736
  foreach ($condition['PaymentMethods'] as $method) {
737
+ if (isset($method['PaymentMethodId']) && $method['PaymentMethodId'] == (int)$paymentMethod) {
738
+ return (int)$condition['PaymentConditionId'];
739
  }
740
  }
741
  }
783
  */
784
  protected function _getAntiforgeryToken()
785
  {
786
+ return Mage::helper('diglin_ricento/api')->getAntiforgeryToken($this->getProductsListing()->getWebsiteId());
 
 
 
787
  }
788
 
789
  /**
799
  }
800
  return array();
801
  }
802
+
803
+ /**
804
+ * @return GetArticleFeeParameter
805
+ */
806
+ public function getArticleFeeDetails($excludeListingFees = false)
807
+ {
808
+ $helper = Mage::helper('diglin_ricento');
809
+
810
+ $this->setLoadFallbackOptions(true);
811
+ $salesType = $this->getSalesOptions()->getSalesType();
812
+
813
+ $articleFeeParameter = new GetArticleFeeParameter();
814
+ $articleFeeParameter
815
+ ->setArticleCondition($this->getProductCondition())
816
+ ->setCategoryId($this->getCategory())
817
+ ->setExcludeListingFees($excludeListingFees)
818
+ ->setInitialQuantity($this->getProductQty())
819
+ ->setPictureCount(0) //@todo check if it is really relevant to send this information as we save some computation, there is no influence on final price
820
+ ->setPromotionIds($this->getSalesOptions()->getPromotionIds())
821
+ ->setStartDate(Helper::getJsonDate($helper->getStartingDate($this)));
822
+
823
+ if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION) {
824
+ $articleFeeParameter->setStartPrice($this->getSalesOptions()->getSalesAuctionStartPrice());
825
+ }
826
+
827
+ if ($salesType == Diglin_Ricento_Model_Config_Source_Sales_Type::BUYNOW || $this->getSalesOptions()->getSalesAuctionDirectBuy()) {
828
+ $articleFeeParameter->setBuyNowPrice($this->getProductPrice());
829
+ }
830
+
831
+ $this->setLoadFallbackOptions(false);
832
+
833
+ return $articleFeeParameter;
834
+ }
835
  }
app/code/community/Diglin/Ricento/Model/Products/Listing/Item/Product.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -77,7 +77,14 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
77
  *
78
  * @var array
79
  */
80
- protected $_configurable_attributes = array();
 
 
 
 
 
 
 
81
 
82
  protected $_title;
83
  protected $_subtitle;
@@ -118,11 +125,11 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
118
  */
119
  public function getMagentoProduct()
120
  {
121
- if ($this->_model) {
122
  return $this->_model;
123
  }
124
 
125
- if ($this->_productId > 0) {
126
  $this->loadProduct();
127
  return $this->_model;
128
  }
@@ -152,8 +159,8 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
152
  */
153
  public function loadProduct($productId = null, $storeId = null)
154
  {
155
- $productId = (is_null($productId)) ? $this->_productId : $productId;
156
- $storeId = (is_null($storeId)) ? $this->_storeId : $storeId;
157
 
158
  if (!$productId) {
159
  throw new Exception('Product ID is empty.');
@@ -177,7 +184,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
177
  {
178
  return array(
179
  $storeId,
180
- $this->getDefaultStoreId(),
181
  Mage_Core_Model_App::ADMIN_STORE_ID
182
  );
183
  }
@@ -190,7 +197,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
190
  {
191
  (!is_null($productId)) && $this->_productId = $productId;
192
 
193
- $productId = (int) is_null($productId) ? $this->_productId : $productId;
194
 
195
  if (empty($productId)) {
196
  return false;
@@ -248,13 +255,13 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
248
  return $this->_model->getTypeId();
249
  }
250
 
251
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
252
 
253
  if (empty($productId) && empty($this->_typeid)) {
254
  return false;
255
  }
256
 
257
- if (empty($this->_typeid) || $productId != $this->_productId) {
258
  $this->getProductInformation($productId);
259
  }
260
 
@@ -271,13 +278,13 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
271
  return $this->_model->getHasOptions();
272
  }
273
 
274
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
275
 
276
  if (empty($productId) && empty($this->_has_options)) {
277
  return false;
278
  }
279
 
280
- if (empty($this->_has_options) || $productId != $this->_productId) {
281
  $this->getProductInformation($productId);
282
  }
283
 
@@ -294,13 +301,13 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
294
  return $this->_model->getRequiredOptions();
295
  }
296
 
297
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
298
 
299
  if (empty($productId) && empty($this->_required_options)) {
300
  return false;
301
  }
302
 
303
- if (empty($this->_required_options) || $productId != $this->_productId) {
304
  $this->getProductInformation($productId);
305
  }
306
 
@@ -313,13 +320,13 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
313
  */
314
  public function getCategoryIds($productId = null)
315
  {
316
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
317
 
318
  if (empty($productId) && empty($this->_category_ids)) {
319
  return false;
320
  }
321
 
322
- if ($productId && empty($this->_category_ids) || $productId != $this->_productId) {
323
  $this->getProductInformation($productId);
324
  }
325
 
@@ -334,8 +341,8 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
334
  */
335
  public function getTitle($productId = null, $storeId = null, $sub = true)
336
  {
337
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
338
- $storeId = (int) (is_null($storeId) ? $this->_storeId : $storeId);
339
 
340
  $titles = array(
341
  'ricardo_title',
@@ -376,8 +383,8 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
376
  */
377
  public function getSubtitle($productId = null, $storeId = null, $sub = true)
378
  {
379
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
380
- $storeId = (int) (is_null($storeId) ? $this->_storeId : $storeId);
381
 
382
  $subtitle = '';
383
 
@@ -405,8 +412,8 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
405
  */
406
  public function getDescription($productId = null, $storeId = null, $sub = true)
407
  {
408
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
409
- $storeId = (int) (is_null($storeId) ? $this->_storeId : $storeId);
410
 
411
  $descriptions = array(
412
  'ricardo_description',
@@ -414,19 +421,57 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
414
  'short_description'
415
  );
416
 
 
417
  $returnedDescription = null;
 
 
418
 
419
  foreach ($this->getStoresList($storeId) as $id) {
420
  if (is_null($id)) {
421
  continue;
422
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  foreach ($descriptions as $description) {
424
- $returnedDescription = $this->_getProductText($description, $productId, $id);
425
- if ($returnedDescription) {
 
 
 
 
 
 
 
 
426
  break;
427
  }
 
 
 
 
428
  }
429
- if ($returnedDescription) {
 
 
 
 
 
 
 
 
 
 
430
  break;
431
  }
432
  }
@@ -443,14 +488,18 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
443
  /**
444
  * @return float
445
  */
446
- public function getPrice()
447
  {
448
- //@todo do the conversion from a non supported currency to the supported currency - at the moment we do not support this feature
449
-
450
  $salesOptions = $this->getProductListingItem()->getSalesOptions();
451
  $price = $this->_getProductPrice($salesOptions->getPriceSourceAttributeCode());
452
 
453
- return Mage::helper('diglin_ricento/price')->calculatePriceChange($price, $salesOptions->getPriceChangeType(), $salesOptions->getPriceChange());
 
 
 
 
 
 
454
  }
455
 
456
  /**
@@ -463,7 +512,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
463
  return $this->_model->getSku();
464
  }
465
 
466
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
467
 
468
  if (empty($productId) && empty($this->_sku)) {
469
  return false;
@@ -492,26 +541,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
492
  */
493
  public function getImages($productId = null)
494
  {
495
- if (is_null($productId) && $this->_model && $this->_model->getId()) {
496
- $productId = $this->_model->getId();
497
- } elseif (is_null($productId) && $this->_productId) {
498
- $productId = $this->_productId;
499
- }
500
-
501
- if (!is_numeric($productId)) {
502
- return false;
503
- }
504
-
505
- $mediaConfig = Mage::getSingleton('catalog/product_media_config');
506
- $images = $this->getAssignedImages($productId);
507
-
508
- foreach ($images as &$image) {
509
- if (isset($image['filepath'])) {
510
- $image['filepath'] = $mediaConfig->getMediaPath($image['filepath']);
511
- }
512
- }
513
-
514
- return $images;
515
  }
516
 
517
  /**
@@ -523,7 +553,15 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
523
  */
524
  public function getAssignedImages($productId = null)
525
  {
526
- $productId = (int) (is_null($productId) ? $this->_productId : $productId);
 
 
 
 
 
 
 
 
527
 
528
  $read = $this->_getReadConnection();
529
  $resource = $this->_getCoreResource();
@@ -570,7 +608,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
570
  ->where('store_id = 0')
571
  ->where('attribute_code = ?', 'image');
572
 
573
- return array_merge($mediaGallery, $read->fetchAll($select));
574
  }
575
 
576
  /**
@@ -579,11 +617,11 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
579
  */
580
  public function getStockItem()
581
  {
582
- if (is_null($this->_model) && $this->_productId < 0) {
583
  throw new Exception('Product Model must be init first');
584
  }
585
 
586
- $productId = !is_null($this->_model) ? $this->_model->getId() : $this->_productId;
587
 
588
  return Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
589
  }
@@ -593,13 +631,16 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
593
  */
594
  public function getQty()
595
  {
596
- if ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE
597
- || $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) {
598
  return false;
599
  }
600
 
601
  $stockItem = $this->getStockItem();
602
 
 
 
 
 
603
  if ($stockItem->getIsQtyDecimal()) {
604
  return false;
605
  }
@@ -607,14 +648,32 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
607
  return $stockItem->getQty();
608
  }
609
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  /**
611
  * Check quantity
612
  *
613
  * @param float $qty
 
614
  * @exception Mage_Core_Exception
615
  * @return bool
616
  */
617
- public function checkQty($qty)
618
  {
619
  $stockItem = $this->getStockItem();
620
 
@@ -625,11 +684,11 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
625
  $composite = false;
626
  $usedProductIds = array();
627
 
628
- if ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
629
  /* @var $instance Mage_Catalog_Model_Product_Type_Configurable */
630
  $usedProductIds = $this->getTypeInstance(true)->getUsedProductIds($this->getMagentoProduct());
631
  $composite = true;
632
- } else if ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED) {
633
  /* @var $instance Mage_Catalog_Model_Product_Type_Grouped */
634
  $usedProductIds = $this->getAssociatedProductIds();
635
  $composite = true;
@@ -639,7 +698,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
639
  foreach ($usedProductIds as $id) {
640
  $stockItem->unsetData(); // cleanup before to proceed, we may also use the method reset but it's not relevant here
641
  $stockItemProd = $stockItem->loadByProduct($id);
642
- if ($stockItemProd->getQty() - $stockItemProd->getMinQty() - $qty < 0) {
643
  switch ($stockItemProd->getBackorders()) {
644
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NONOTIFY:
645
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NOTIFY:
@@ -651,7 +710,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
651
  }
652
  }
653
  } else {
654
- if ($stockItem->getQty() - $stockItem->getMinQty() - $qty < 0) {
655
  switch ($stockItem->getBackorders()) {
656
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NONOTIFY:
657
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NOTIFY:
@@ -718,7 +777,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
718
 
719
  $select = $readConnection
720
  ->select()
721
- ->from(array('cpet'=> $this->_getCoreResource()->getTableName('catalog_product_entity_text')), array($field => 'value'))
722
  ->join(
723
  array('ea' => $this->_getCoreResource()->getTableName('eav_attribute')),
724
  '`cpet`.`attribute_id` = `ea`.`attribute_id` AND `ea`.`attribute_code` = \''. $field .'\'',
@@ -727,7 +786,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
727
  ->where('`cpet`.`entity_id` = ?', $productId)
728
  ->where('`cpet`.`store_id` = ?', $storeId);
729
 
730
- return $readConnection->fetchOne($select);
731
  }
732
 
733
  /**
@@ -737,17 +796,14 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
737
  protected function _getProductPrice($field = null)
738
  {
739
  switch ($this->getTypeId()) {
740
- case Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE:
741
- $price = $this->_getSimpleProductBasePrice($field);
742
- return $this->_getConfigurableProductBasePrice($price);
743
- break;
744
  case Mage_Catalog_Model_Product_Type::TYPE_GROUPED:
745
  return $this->_getGroupedProductBasePrice();
746
  break;
747
  case Mage_Catalog_Model_Product_Type::TYPE_SIMPLE:
 
748
  default:
749
  // @todo implement a factory adapter to get other kind of external product type
750
- return $this->_getSimpleProductBasePrice($field);
751
  break;
752
  }
753
  }
@@ -757,42 +813,71 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
757
  * @param bool $withTax
758
  * @return float|string
759
  */
760
- protected function _getSimpleProductBasePrice($field = null, $withTax = true)
761
  {
762
  if (is_null($field)) {
763
  $field = 'price';
764
  }
765
 
766
- $readConnection = $this->_getReadConnection();
767
-
768
- $select = $readConnection
769
- ->select()
770
- ->from(array('cped'=> $this->_getCoreResource()->getTableName('catalog_product_entity_decimal')), array($field => 'value'))
771
- ->join(
772
- array('ea' => $this->_getCoreResource()->getTableName('eav_attribute')),
773
- '`cped`.`attribute_id` = `ea`.`attribute_id` AND `ea`.`attribute_code` = \''. $field .'\'',
774
- array()
775
- )
776
- ->where('`cped`.`entity_id` = ?', (int) $this->getProductId())
777
- ->where('`cped`.`store_id` = ?', $this->_defaultStoreId);
778
 
779
- $price = $readConnection->fetchOne($select);
 
 
780
 
781
  if ($field == 'special_price' && empty($price)) {
782
- $price = $this->_getSimpleProductBasePrice('price', false);
 
 
 
 
 
 
783
  }
784
 
785
  /**
786
  * Calculate price with incl tax if price catalog doesn't include it
787
- * @todo improve performance - Loading product is bad idea (we just need getTaxPercent and getTaxClassId)
788
  */
789
  if ($withTax) {
790
- $price = Mage::helper('tax')->getPrice($this->getMagentoProduct(), $price, true, null, null, null, $this->_defaultStoreId);
 
 
 
 
 
 
 
 
791
  }
792
 
793
  return $price;
794
  }
795
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
796
  /**
797
  * Associated Products for grouped products
798
  *
@@ -857,7 +942,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
857
  $priceInclTax = Mage::helper('tax')->getPrice($associatedProduct, $associatedProduct->getPrice(), true, null, null, null, $this->_defaultStoreId);
858
 
859
  // Set default qty = 1 when qty = 0
860
- $totalPrice += (((!$associatedProduct->getQty()) ? $associatedProduct->getQty() : $defaultQty) * $priceInclTax);
861
  }
862
  }
863
 
@@ -902,22 +987,27 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
902
  return $this->_usedProductIds;
903
  }
904
 
 
 
 
 
905
  public function getConfigurableAttributes()
906
  {
907
  if (!$this->isConfigurableType()) {
908
  return null;
909
  }
910
 
911
- if (empty($this->_configurable_attributes)) {
912
- $this->_configurable_attributes = Mage::getResourceModel('catalog/product_type_configurable_attribute_collection')
913
  ->orderByPosition()
914
  ->setProductFilter($this->getMagentoProduct());
915
  }
916
 
917
- return $this->_configurable_attributes;
918
  }
919
 
920
  /**
 
921
  * @param float|int $productPrice
922
  * @return null|float
923
  */
@@ -955,6 +1045,24 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
955
  return ($productPrice + $finalMinPrice);
956
  }
957
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
958
  /**
959
  * @param int $productId
960
  * @return $this;
@@ -1053,7 +1161,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
1053
  */
1054
  public function isSimpleType()
1055
  {
1056
- return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE;
1057
  }
1058
 
1059
  /**
@@ -1061,7 +1169,7 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
1061
  */
1062
  public function isConfigurableType()
1063
  {
1064
- return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE;
1065
  }
1066
 
1067
  /**
@@ -1069,6 +1177,24 @@ class Diglin_Ricento_Model_Products_Listing_Item_Product
1069
  */
1070
  public function isGroupedType()
1071
  {
1072
- return $this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1073
  }
1074
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
77
  *
78
  * @var array
79
  */
80
+ protected $_configurableAttributes = array();
81
+
82
+ /**
83
+ * For configurable products
84
+ *
85
+ * @var array
86
+ */
87
+ protected $_priceOptions = array();
88
 
89
  protected $_title;
90
  protected $_subtitle;
125
  */
126
  public function getMagentoProduct()
127
  {
128
+ if ($this->_model && $this->_model->getId() == $this->getProductId()) {
129
  return $this->_model;
130
  }
131
 
132
+ if ($this->getProductId() > 0) {
133
  $this->loadProduct();
134
  return $this->_model;
135
  }
159
  */
160
  public function loadProduct($productId = null, $storeId = null)
161
  {
162
+ $productId = (is_null($productId)) ? $this->getProductId() : $productId;
163
+ $storeId = (is_null($storeId)) ? $this->getStoreId() : $storeId;
164
 
165
  if (!$productId) {
166
  throw new Exception('Product ID is empty.');
184
  {
185
  return array(
186
  $storeId,
187
+ $this->getDefaultStoreId(), // fallback language
188
  Mage_Core_Model_App::ADMIN_STORE_ID
189
  );
190
  }
197
  {
198
  (!is_null($productId)) && $this->_productId = $productId;
199
 
200
+ $productId = (int) is_null($productId) ? $this->getProductId() : $productId;
201
 
202
  if (empty($productId)) {
203
  return false;
255
  return $this->_model->getTypeId();
256
  }
257
 
258
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
259
 
260
  if (empty($productId) && empty($this->_typeid)) {
261
  return false;
262
  }
263
 
264
+ if (empty($this->_typeid) || $productId != $this->getProductId()) {
265
  $this->getProductInformation($productId);
266
  }
267
 
278
  return $this->_model->getHasOptions();
279
  }
280
 
281
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
282
 
283
  if (empty($productId) && empty($this->_has_options)) {
284
  return false;
285
  }
286
 
287
+ if (empty($this->_has_options) || $productId != $this->getProductId()) {
288
  $this->getProductInformation($productId);
289
  }
290
 
301
  return $this->_model->getRequiredOptions();
302
  }
303
 
304
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
305
 
306
  if (empty($productId) && empty($this->_required_options)) {
307
  return false;
308
  }
309
 
310
+ if (empty($this->_required_options) || $productId != $this->getProductId()) {
311
  $this->getProductInformation($productId);
312
  }
313
 
320
  */
321
  public function getCategoryIds($productId = null)
322
  {
323
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
324
 
325
  if (empty($productId) && empty($this->_category_ids)) {
326
  return false;
327
  }
328
 
329
+ if ($productId && empty($this->_category_ids) || $productId != $this->getProductId()) {
330
  $this->getProductInformation($productId);
331
  }
332
 
341
  */
342
  public function getTitle($productId = null, $storeId = null, $sub = true)
343
  {
344
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
345
+ $storeId = (int) (is_null($storeId) ? $this->getStoreId() : $storeId);
346
 
347
  $titles = array(
348
  'ricardo_title',
383
  */
384
  public function getSubtitle($productId = null, $storeId = null, $sub = true)
385
  {
386
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
387
+ $storeId = (int) (is_null($storeId) ? $this->getStoreId() : $storeId);
388
 
389
  $subtitle = '';
390
 
412
  */
413
  public function getDescription($productId = null, $storeId = null, $sub = true)
414
  {
415
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
416
+ $storeId = (int) (is_null($storeId) ? $this->getStoreId() : $storeId);
417
 
418
  $descriptions = array(
419
  'ricardo_description',
421
  'short_description'
422
  );
423
 
424
+ $canMergeDescriptions = Mage::helper('diglin_ricento')->canMergeDescriptions($storeId);
425
  $returnedDescription = null;
426
+ $mergedDescriptions = array();
427
+ $skip = false;
428
 
429
  foreach ($this->getStoresList($storeId) as $id) {
430
  if (is_null($id)) {
431
  continue;
432
  }
433
+
434
+ /**
435
+ * 1. Search if ricardo_description exists
436
+ * 2. if not exist search description
437
+ * 3. if not exist search short description
438
+ *
439
+ * if Merge allowed
440
+ * 1. Search if ricardo_description exists
441
+ * 2. if not exists search description and keep in memory
442
+ * 3. Then Search short_description and keep in memory
443
+ * 4. Do the merge
444
+ */
445
+
446
  foreach ($descriptions as $description) {
447
+ $result = $this->_getProductText($description, $productId, $id);
448
+ $returnedDescription = $result[$description];
449
+ $rowFounded = (bool) (count($result) >= 1);
450
+
451
+ if ((!$rowFounded && $canMergeDescriptions || !$rowFounded && $description == 'ricardo_description') && $id != 0) {
452
+ $returnedDescription = $this->_getProductText($description, $productId, 0);
453
+ }
454
+
455
+ if ($returnedDescription && !$canMergeDescriptions || $returnedDescription && $description == 'ricardo_description') {
456
+ $skip = true;
457
  break;
458
  }
459
+
460
+ if ($returnedDescription) {
461
+ $mergedDescriptions[$description] = $returnedDescription;
462
+ }
463
  }
464
+
465
+ if ($canMergeDescriptions && count($mergedDescriptions) && !$skip) {
466
+ if (!empty($mergedDescriptions['short_description']) && !empty($mergedDescriptions['description'])) {
467
+ $returnedDescription = $mergedDescriptions['short_description'] . '<br><br>' . $mergedDescriptions['description'];
468
+ }
469
+ if (!empty($returnedDescription)) {
470
+ $skip = true;
471
+ }
472
+ }
473
+
474
+ if ($skip) {
475
  break;
476
  }
477
  }
488
  /**
489
  * @return float
490
  */
491
+ public function getPrice($convert = false)
492
  {
 
 
493
  $salesOptions = $this->getProductListingItem()->getSalesOptions();
494
  $price = $this->_getProductPrice($salesOptions->getPriceSourceAttributeCode());
495
 
496
+ $price = Mage::helper('diglin_ricento/price')->calculatePriceChange($price, $salesOptions->getPriceChangeType(), $salesOptions->getPriceChange());
497
+
498
+ if ($convert) {
499
+ $price = $this->_convert($price);
500
+ }
501
+
502
+ return $price;
503
  }
504
 
505
  /**
512
  return $this->_model->getSku();
513
  }
514
 
515
+ $productId = (int) (is_null($productId) ? $this->getProductId() : $productId);
516
 
517
  if (empty($productId) && empty($this->_sku)) {
518
  return false;
541
  */
542
  public function getImages($productId = null)
543
  {
544
+ return $this->getAssignedImages($productId);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
545
  }
546
 
547
  /**
553
  */
554
  public function getAssignedImages($productId = null)
555
  {
556
+ if (is_null($productId) && $this->_model && $this->_model->getId()) {
557
+ $productId = $this->_model->getId();
558
+ } elseif (is_null($productId) && $this->getProductId()) {
559
+ $productId = $this->getProductId();
560
+ }
561
+
562
+ if (!is_numeric($productId)) {
563
+ return false;
564
+ }
565
 
566
  $read = $this->_getReadConnection();
567
  $resource = $this->_getCoreResource();
608
  ->where('store_id = 0')
609
  ->where('attribute_code = ?', 'image');
610
 
611
+ return array_merge($read->fetchAll($select), $mediaGallery);
612
  }
613
 
614
  /**
617
  */
618
  public function getStockItem()
619
  {
620
+ if (is_null($this->_model) && $this->getProductId() < 0) {
621
  throw new Exception('Product Model must be init first');
622
  }
623
 
624
+ $productId = !is_null($this->_model) ? $this->_model->getId() : $this->getProductId();
625
 
626
  return Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
627
  }
631
  */
632
  public function getQty()
633
  {
634
+ if ($this->isConfigurableType()) {
 
635
  return false;
636
  }
637
 
638
  $stockItem = $this->getStockItem();
639
 
640
+ if ($this->isGroupedType() && $stockItem->getIsInStock()) {
641
+ return 1;
642
+ }
643
+
644
  if ($stockItem->getIsQtyDecimal()) {
645
  return false;
646
  }
648
  return $stockItem->getQty();
649
  }
650
 
651
+ /**
652
+ * @param int $productStockQty
653
+ * @param int $qtyTargeted
654
+ * @param $type
655
+ * @return float
656
+ */
657
+ public function getPercentQty($productStockQty, $qtyTargeted, $type)
658
+ {
659
+ if ($type == Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_PERCENT) {
660
+ $qty = round($productStockQty * $qtyTargeted / 100, 0, PHP_ROUND_HALF_DOWN);
661
+ } else {
662
+ $qty = $qtyTargeted;
663
+ }
664
+
665
+ return ($qty) ? $qty : 1;
666
+ }
667
+
668
  /**
669
  * Check quantity
670
  *
671
  * @param float $qty
672
+ * @param string $type
673
  * @exception Mage_Core_Exception
674
  * @return bool
675
  */
676
+ public function checkQty($qty, $type = Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_FIX)
677
  {
678
  $stockItem = $this->getStockItem();
679
 
684
  $composite = false;
685
  $usedProductIds = array();
686
 
687
+ if ($this->isConfigurableType()) {
688
  /* @var $instance Mage_Catalog_Model_Product_Type_Configurable */
689
  $usedProductIds = $this->getTypeInstance(true)->getUsedProductIds($this->getMagentoProduct());
690
  $composite = true;
691
+ } else if ($this->isGroupedType()) {
692
  /* @var $instance Mage_Catalog_Model_Product_Type_Grouped */
693
  $usedProductIds = $this->getAssociatedProductIds();
694
  $composite = true;
698
  foreach ($usedProductIds as $id) {
699
  $stockItem->unsetData(); // cleanup before to proceed, we may also use the method reset but it's not relevant here
700
  $stockItemProd = $stockItem->loadByProduct($id);
701
+ if ($stockItemProd->getQty() - $stockItemProd->getMinQty() - $this->getPercentQty($stockItemProd->getQty(), $qty, $type) < 0) {
702
  switch ($stockItemProd->getBackorders()) {
703
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NONOTIFY:
704
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NOTIFY:
710
  }
711
  }
712
  } else {
713
+ if ($stockItem->getQty() - $stockItem->getMinQty() - $this->getPercentQty($stockItem->getQty(), $qty, $type) < 0) {
714
  switch ($stockItem->getBackorders()) {
715
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NONOTIFY:
716
  case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NOTIFY:
777
 
778
  $select = $readConnection
779
  ->select()
780
+ ->from(array('cpet'=> $this->_getCoreResource()->getTableName('catalog_product_entity_text')), array($field => 'value', 'entity_id'))
781
  ->join(
782
  array('ea' => $this->_getCoreResource()->getTableName('eav_attribute')),
783
  '`cpet`.`attribute_id` = `ea`.`attribute_id` AND `ea`.`attribute_code` = \''. $field .'\'',
786
  ->where('`cpet`.`entity_id` = ?', $productId)
787
  ->where('`cpet`.`store_id` = ?', $storeId);
788
 
789
+ return $readConnection->fetchRow($select);
790
  }
791
 
792
  /**
796
  protected function _getProductPrice($field = null)
797
  {
798
  switch ($this->getTypeId()) {
 
 
 
 
799
  case Mage_Catalog_Model_Product_Type::TYPE_GROUPED:
800
  return $this->_getGroupedProductBasePrice();
801
  break;
802
  case Mage_Catalog_Model_Product_Type::TYPE_SIMPLE:
803
+ case Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE:
804
  default:
805
  // @todo implement a factory adapter to get other kind of external product type
806
+ return $this->_getProductBasePrice($field);
807
  break;
808
  }
809
  }
813
  * @param bool $withTax
814
  * @return float|string
815
  */
816
+ protected function _getProductBasePrice($field = null, $withTax = true)
817
  {
818
  if (is_null($field)) {
819
  $field = 'price';
820
  }
821
 
822
+ $productId = ($this->getProductListingItem()->getParentProductId()) ? $this->getProductListingItem()->getParentProductId() : $this->getProductId();
823
+ $price = $this->_getPrice($field, $productId, $this->_defaultStoreId);
 
 
 
 
 
 
 
 
 
 
824
 
825
+ if ($price === false) {
826
+ $price = $this->_getPrice($field, $productId);
827
+ }
828
 
829
  if ($field == 'special_price' && empty($price)) {
830
+ $price = $this->_getProductBasePrice('price', false);
831
+ }
832
+
833
+ if ($this->getProductListingItem()->getParentProductId() && count($this->getPriceOptions())) {
834
+ foreach ($this->getPriceOptions() as $option) {
835
+ $price += Mage::helper('diglin_ricento/price')->calcSelectionPrice($option, $price);
836
+ }
837
  }
838
 
839
  /**
840
  * Calculate price with incl tax if price catalog doesn't include it
841
+ * @todo improve performance - Loading product is a bad idea (we just need getTaxPercent and getTaxClassId)
842
  */
843
  if ($withTax) {
844
+ if ($productId != $this->getProductId()) {
845
+ $product = Mage::getModel('catalog/product')
846
+ ->setStoreId($this->getStoreId())
847
+ ->load($productId);
848
+ } else {
849
+ $product = $this->getMagentoProduct();
850
+ }
851
+
852
+ $price = Mage::helper('tax')->getPrice($product, $price, true, null, null, null, $this->_defaultStoreId);
853
  }
854
 
855
  return $price;
856
  }
857
 
858
+ /**
859
+ * @param string $field
860
+ * @param int $productId
861
+ * @param int $storeId
862
+ * @return string|bool
863
+ */
864
+ private function _getPrice($field, $productId, $storeId = Mage_Core_Model_App::ADMIN_STORE_ID)
865
+ {
866
+ $readConnection = $this->_getReadConnection();
867
+ $select = $readConnection
868
+ ->select()
869
+ ->from(array('cped'=> $this->_getCoreResource()->getTableName('catalog_product_entity_decimal')), array($field => 'value'))
870
+ ->join(
871
+ array('ea' => $this->_getCoreResource()->getTableName('eav_attribute')),
872
+ '`cped`.`attribute_id` = `ea`.`attribute_id` AND `ea`.`attribute_code` = \''. $field .'\'',
873
+ array()
874
+ )
875
+ ->where('`cped`.`entity_id` = ?', (int) $productId)
876
+ ->where('`cped`.`store_id` = ?', (int) $storeId);
877
+
878
+ return $readConnection->fetchOne($select);
879
+ }
880
+
881
  /**
882
  * Associated Products for grouped products
883
  *
942
  $priceInclTax = Mage::helper('tax')->getPrice($associatedProduct, $associatedProduct->getPrice(), true, null, null, null, $this->_defaultStoreId);
943
 
944
  // Set default qty = 1 when qty = 0
945
+ $totalPrice += ((($associatedProduct->getQty() > 0) ? $associatedProduct->getQty() : $defaultQty) * $priceInclTax);
946
  }
947
  }
948
 
987
  return $this->_usedProductIds;
988
  }
989
 
990
+ /**
991
+ * @return array|Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection|null
992
+ * @throws Exception
993
+ */
994
  public function getConfigurableAttributes()
995
  {
996
  if (!$this->isConfigurableType()) {
997
  return null;
998
  }
999
 
1000
+ if (empty($this->_configurableAttributes)) {
1001
+ $this->_configurableAttributes = Mage::getResourceModel('catalog/product_type_configurable_attribute_collection')
1002
  ->orderByPosition()
1003
  ->setProductFilter($this->getMagentoProduct());
1004
  }
1005
 
1006
+ return $this->_configurableAttributes;
1007
  }
1008
 
1009
  /**
1010
+ * @deprecated
1011
  * @param float|int $productPrice
1012
  * @return null|float
1013
  */
1045
  return ($productPrice + $finalMinPrice);
1046
  }
1047
 
1048
+ /**
1049
+ * @param $price
1050
+ * @return float|null
1051
+ * @throws Mage_Core_Exception
1052
+ */
1053
+ protected function _convert($price)
1054
+ {
1055
+ $websiteId = $this->getProductListingItem()->getProductsListing()->getWebsiteId();
1056
+ $baseCurrency = Mage::app()->getWebsite($websiteId)->getBaseCurrencyCode();
1057
+
1058
+ if ($baseCurrency != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
1059
+ $priceHelper = Mage::helper('diglin_ricento/price');
1060
+ $price = $priceHelper->convert($price, $baseCurrency, Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY, $websiteId);
1061
+ }
1062
+
1063
+ return $price;
1064
+ }
1065
+
1066
  /**
1067
  * @param int $productId
1068
  * @return $this;
1161
  */
1162
  public function isSimpleType()
1163
  {
1164
+ return ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE);
1165
  }
1166
 
1167
  /**
1169
  */
1170
  public function isConfigurableType()
1171
  {
1172
+ return ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE);
1173
  }
1174
 
1175
  /**
1177
  */
1178
  public function isGroupedType()
1179
  {
1180
+ return ($this->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED);
1181
+ }
1182
+
1183
+ /**
1184
+ * @return array
1185
+ */
1186
+ public function getPriceOptions()
1187
+ {
1188
+ return $this->_priceOptions;
1189
+ }
1190
+
1191
+ /**
1192
+ * @param array $priceOptions
1193
+ * @return $this
1194
+ */
1195
+ public function setPriceOptions($priceOptions)
1196
+ {
1197
+ $this->_priceOptions = $priceOptions;
1198
+ return $this;
1199
  }
1200
  }
app/code/community/Diglin/Ricento/Model/Products/Listing/Log.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -45,6 +45,7 @@ class Diglin_Ricento_Model_Products_Listing_Log extends Mage_Core_Model_Abstract
45
  const LOG_TYPE_RELIST = 3;
46
  const LOG_TYPE_SYNCLIST = 4;
47
  const LOG_TYPE_ORDER = 5;
 
48
 
49
  /**
50
  * Prefix of model events names
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
45
  const LOG_TYPE_RELIST = 3;
46
  const LOG_TYPE_SYNCLIST = 4;
47
  const LOG_TYPE_ORDER = 5;
48
+ const LOG_TYPE_CLOSED = 6;
49
 
50
  /**
51
  * Prefix of model events names
app/code/community/Diglin/Ricento/Model/Resource/Api/Token.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Api/Token/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -62,7 +62,7 @@ class Diglin_Ricento_Model_Resource_Products_Listing extends Mage_Core_Model_Res
62
  ->where('pl.entity_id = :id')
63
  ->joinLeft(
64
  array('pli' => $this->getTable('diglin_ricento/products_listing_item')),
65
- 'pli.products_listing_id = pl.entity_id AND pl.status = "listed"',
66
  array('item_status' => 'pli.status')
67
  );
68
 
@@ -103,4 +103,160 @@ class Diglin_Ricento_Model_Resource_Products_Listing extends Mage_Core_Model_Res
103
  $bind,
104
  array($this->getIdFieldName() . ' = ?' => $listId));
105
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
62
  ->where('pl.entity_id = :id')
63
  ->joinLeft(
64
  array('pli' => $this->getTable('diglin_ricento/products_listing_item')),
65
+ 'pli.products_listing_id = pl.entity_id AND pl.status = "'. Diglin_Ricento_Helper_Data::STATUS_LISTED .'"',
66
  array('item_status' => 'pli.status')
67
  );
68
 
103
  $bind,
104
  array($this->getIdFieldName() . ' = ?' => $listId));
105
  }
106
+
107
+ /**
108
+ * Removes items by product id
109
+ *
110
+ * @param array $productIds
111
+ * @param int $itemId
112
+ * @return int[] Returns two values: [number of removed products, number of not removed listed products]
113
+ */
114
+ public function removeProductsByProductIds(array $productIds, $itemId)
115
+ {
116
+ /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
117
+ $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
118
+ $items
119
+ ->addFieldToFilter('product_id', array('in' => $productIds))
120
+ ->addFieldToFilter('parent_product_id', new Zend_Db_Expr('NULL'))
121
+ ->addFieldToFilter('type', array('neq' => Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE));
122
+
123
+ $itemsToRemove = clone $items;
124
+
125
+ $numberOfListedItems = $items->addFieldToFilter('products_listing_id', $itemId)
126
+ ->addFieldToFilter('status', array('eq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
127
+ ->getSize();
128
+
129
+ $numberOfItemsToDelete = $itemsToRemove->addFieldToFilter('products_listing_id', $itemId)
130
+ ->addFieldToFilter('status', array('neq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
131
+ ->count();
132
+
133
+ $this->beginTransaction();
134
+
135
+ $productsIdRemoved = array();
136
+ if ($numberOfItemsToDelete) {
137
+ $productsIdRemoved = $itemsToRemove->getColumnValues('product_id');
138
+ $itemsToRemove->walk('delete');
139
+ }
140
+
141
+ $this->commit();
142
+
143
+ /**
144
+ * Configurable Products
145
+ */
146
+ $productIds = array_diff($productIds, $productsIdRemoved);
147
+
148
+ foreach ($productIds as $productId) {
149
+ /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
150
+ $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
151
+
152
+ $childrenCount = $items->addFieldToFilter('products_listing_id', $itemId)
153
+ ->addFieldToFilter('parent_product_id', $productId)
154
+ ->addFieldToFilter('status', array('eq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
155
+ ->getSize();
156
+
157
+
158
+ if (!$childrenCount) {
159
+ $this->beginTransaction();
160
+
161
+ $readConnection = $this->getReadConnection();
162
+
163
+ $select = $readConnection
164
+ ->select()
165
+ ->from(array('pli' => $this->getTable('diglin_ricento/products_listing_item')), 'item_id')
166
+ ->where('product_id = ?', $productId)
167
+ ->deleteFromSelect('pli');
168
+
169
+ if (!empty($select) && !is_numeric($select)) {
170
+ $readConnection->query($select);
171
+ }
172
+
173
+ $items->walk('delete');
174
+
175
+ $this->commit();
176
+
177
+ $numberOfItemsToDelete++;
178
+ }
179
+
180
+ $numberOfListedItems += $childrenCount;
181
+ }
182
+
183
+ return array($numberOfItemsToDelete, $numberOfListedItems);
184
+ }
185
+
186
+ /**
187
+ * Removes items by item id
188
+ *
189
+ * @param array $itemIds
190
+ * @param int $itemId
191
+ * @return int[] Returns two values: [number of removed products, number of not removed listed products]
192
+ */
193
+ public function removeProductsByItemIds(array $itemIds, $itemId)
194
+ {
195
+ /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
196
+ $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
197
+ $items
198
+ ->addFieldToFilter('item_id', array('in' => $itemIds))
199
+ ->addFieldToFilter('parent_product_id', new Zend_Db_Expr('NULL'))
200
+ ->addFieldToFilter('type', array('neq' => Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE));
201
+
202
+ $itemsToRemove = clone $items;
203
+
204
+ $numberOfListedItems = $items->addFieldToFilter('products_listing_id', $itemId)
205
+ ->addFieldToFilter('status', array('eq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
206
+ ->getSize();
207
+
208
+ $numberOfItemsToDelete = $itemsToRemove->addFieldToFilter('products_listing_id', $itemId)
209
+ ->addFieldToFilter('status', array('neq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
210
+ ->count();
211
+
212
+ $this->beginTransaction();
213
+
214
+ $itemsIdRemoved = array();
215
+ if ($numberOfItemsToDelete) {
216
+ $itemsIdRemoved = $itemsToRemove->getColumnValues('item_id');
217
+ $itemsToRemove->walk('delete');
218
+ }
219
+
220
+ $this->commit();
221
+
222
+ /**
223
+ * Configurable Products
224
+ */
225
+ $itemIds = array_diff($itemIds, $itemsIdRemoved);
226
+
227
+ foreach ($itemIds as $itemId) {
228
+ /** @var $items Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection */
229
+ $items = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
230
+
231
+ $childrenCount = $items->addFieldToFilter('products_listing_id', $itemId)
232
+ ->addFieldToFilter('parent_item_id', $itemId)
233
+ ->addFieldToFilter('status', array('eq' => Diglin_Ricento_Helper_Data::STATUS_LISTED))
234
+ ->getSize();
235
+
236
+ if (!$childrenCount) {
237
+ $this->beginTransaction();
238
+
239
+ $readConnection = $this->getReadConnection();
240
+ $select = $readConnection
241
+ ->select()
242
+ ->from(array('pli' => $this->getTable('diglin_ricento/products_listing_item')), 'item_id')
243
+ ->where('item_id = ?', $itemId)
244
+ ->deleteFromSelect('pli');
245
+
246
+ if (!empty($select) && !is_numeric($select)) {
247
+ $readConnection->query($select);
248
+ }
249
+
250
+ $items->walk('delete');
251
+
252
+ $this->commit();
253
+
254
+ $numberOfItemsToDelete++;
255
+ }
256
+
257
+ $numberOfListedItems += $childrenCount;
258
+ }
259
+
260
+ return array($numberOfItemsToDelete, $numberOfListedItems);
261
+ }
262
  }
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Item.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -78,12 +78,26 @@ class Diglin_Ricento_Model_Resource_Products_Listing_Item extends Mage_Core_Mode
78
  {
79
  $readerConnection = $this->_getReadAdapter();
80
 
 
 
 
 
 
 
 
 
 
 
81
  $select = $readerConnection->select()
82
  ->from($this->getTable('diglin_ricento/products_listing_item'), 'product_id')
83
  ->where('products_listing_id = :id')
84
  ->where($whereClause);
85
  $binds = array('id' => $productsListingId);
86
 
 
 
 
 
87
  return count($readerConnection->fetchAll($select, $binds));
88
  }
89
 
@@ -119,44 +133,4 @@ class Diglin_Ricento_Model_Resource_Products_Listing_Item extends Mage_Core_Mode
119
  $bind,
120
  array($this->getIdFieldName() . ' = ?' => $itemId));
121
  }
122
-
123
- /**
124
- * Stop parent product item if all children products are stopped
125
- * Probably deprecated because the parent configurable product should not have a changing status
126
- *
127
- * @param $productsListingId
128
- * @return $this
129
- */
130
- public function setParentStatusStop($productsListingId)
131
- {
132
- $readerConnection = $this->_getReadAdapter();
133
-
134
- $select = $readerConnection->select()
135
- ->from(array('pli' => $this->getTable('diglin_ricento/products_listing_item')), array( 'parent_id' => 'pli.parent_item_id', 'item_status' => 'pli.status'))
136
- ->where('pli.products_listing_id = :id')
137
- ->where('pli.parent_item_id IS NOT NULL')
138
- ->joinLeft(array('plib' => $this->getTable('diglin_ricento/products_listing_item')), 'plib.item_id = pli.parent_item_id AND plib.status = "listed"');
139
-
140
- $binds = array('id' => $productsListingId);
141
-
142
- $items = $readerConnection->fetchAll($select, $binds);
143
- $parents = array();
144
-
145
- foreach ($items as $item) {
146
- if ($item['item_status'] == Diglin_Ricento_Helper_Data::STATUS_STOPPED) {
147
- $parents[$item['parent_id']]['stopped'] = true;
148
- }
149
- if ($item['item_status'] == Diglin_Ricento_Helper_Data::STATUS_LISTED) {
150
- $parents[$item['parent_id']]['listed'] = true;
151
- }
152
- }
153
-
154
- foreach ($parents as $key => $parent) {
155
- if (!isset($parents[$key]['listed']) && isset($parents[$key]['stopped'])) {
156
- $this->saveCurrentItem($key, array('status' => Diglin_Ricento_Helper_Data::STATUS_STOPPED));
157
- }
158
- }
159
-
160
- return $this;
161
- }
162
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
78
  {
79
  $readerConnection = $this->_getReadAdapter();
80
 
81
+ /* Exclude Parent Products from calculation */
82
+ $select = $readerConnection->select()
83
+ ->from($this->getTable('diglin_ricento/products_listing_item'), 'parent_item_id')
84
+ ->where('products_listing_id = :id')
85
+ ->where('parent_item_id > 0')
86
+ ->group('parent_item_id');
87
+ $binds = array('id' => $productsListingId);
88
+
89
+ $itemIds = $readerConnection->fetchCol($select, $binds);
90
+
91
  $select = $readerConnection->select()
92
  ->from($this->getTable('diglin_ricento/products_listing_item'), 'product_id')
93
  ->where('products_listing_id = :id')
94
  ->where($whereClause);
95
  $binds = array('id' => $productsListingId);
96
 
97
+ if (count($itemIds)) {
98
+ $select->where('item_id NOT IN ('. implode(",", $itemIds) .')');
99
+ }
100
+
101
  return count($readerConnection->fetchAll($select, $binds));
102
  }
103
 
133
  $bind,
134
  array($this->getIdFieldName() . ' = ?' => $itemId));
135
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  }
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Item/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -49,56 +49,12 @@ class Diglin_Ricento_Model_Resource_Products_Listing_Item_Collection extends Mag
49
  $connection->update(
50
  $this->getTable('diglin_ricento/products_listing_item'),
51
  array('status' => $status),
52
- array('item_id IN (?)' => $this->getAllIds())
53
  );
54
 
55
  return $this;
56
  }
57
 
58
- /**
59
- * Get only items collection being a configurable product
60
- *
61
- * @return $this
62
- */
63
- public function getConfigurableProducts()
64
- {
65
- if (!$this->_isProductConfigurableTableJoined) {
66
- $this
67
- ->getSelect()
68
- ->join(
69
- array('pl' => $this->getTable('catalog/product')),
70
- "pl.entity_id = main_table.product_id",
71
- array('product_type' => 'type_id')
72
- )
73
- ->where('type_id = ?', Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE);
74
-
75
- $this->_isProductConfigurableTableJoined = true;
76
- }
77
- return $this;
78
- }
79
-
80
- /**
81
- * Get only items collection being a configurable product
82
- *
83
- * @return $this
84
- */
85
- public function getProductsWithoutConfigurable()
86
- {
87
- if (!$this->_isProductTableJoined) {
88
- $this
89
- ->getSelect()
90
- ->join(
91
- array('pl' => $this->getTable('catalog/product')),
92
- "pl.entity_id = main_table.product_id",
93
- array('product_type' => 'type_id')
94
- )
95
- ->where('type_id <> ?', Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE);
96
-
97
- $this->_isProductTableJoined = true;
98
- }
99
- return $this;
100
- }
101
-
102
  public function getAddAdditionalInformation()
103
  {
104
  return $this->_addAdditionalInformation;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
49
  $connection->update(
50
  $this->getTable('diglin_ricento/products_listing_item'),
51
  array('status' => $status),
52
+ array('item_id IN (?)' => $this->getAllIds(), 'type <> ?' => 'configurable')
53
  );
54
 
55
  return $this;
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  public function getAddAdditionalInformation()
59
  {
60
  return $this->_addAdditionalInformation;
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Log.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Products/Listing/Log/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Rule.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Rule/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sales/Options.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sales/Options/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sales/Transaction.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sales/Transaction/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Model_Resource_Sales_Transaction_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  class Diglin_Ricento_Model_Resource_Sales_Transaction_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
app/code/community/Diglin/Ricento/Model/Resource/Sync/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sync/Job.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Resource/Sync/Job/Listing/Collection.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Rule.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Sales/Method/Payment.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -72,11 +72,14 @@ class Diglin_Ricento_Model_Sales_Method_Payment extends Mage_Payment_Model_Metho
72
  }
73
 
74
  if ($checksBitMask & self::CHECK_IS_RICARDO_ORDER) {
75
- if (!$quote->getIsRicardo()) {
76
- return false;
77
  }
78
  }
79
 
80
- return parent::isApplicableToQuote($quote, $checksBitMask);
 
 
 
81
  }
82
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
72
  }
73
 
74
  if ($checksBitMask & self::CHECK_IS_RICARDO_ORDER) {
75
+ if ($quote->getIsRicardo()) {
76
+ return true;
77
  }
78
  }
79
 
80
+ if (method_exists('Mage_Payment_Model_Method_Abstract','isApplicableToQuote')) {
81
+ return parent::isApplicableToQuote($quote, $checksBitMask);
82
+ }
83
+ return false;
84
  }
85
  }
app/code/community/Diglin/Ricento/Model/Sales/Method/Shipping.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -16,12 +16,13 @@ class Diglin_Ricento_Model_Sales_Method_Shipping
16
  extends Mage_Shipping_Model_Carrier_Abstract
17
  implements Mage_Shipping_Model_Carrier_Interface
18
  {
 
19
  /**
20
  * Carrier's code
21
  *
22
  * @var string
23
  */
24
- protected $_code = 'ricento';
25
 
26
  /**
27
  * Whether this carrier has fixed rates calculation
@@ -38,11 +39,13 @@ class Diglin_Ricento_Model_Sales_Method_Shipping
38
  */
39
  public function collectRates(Mage_Shipping_Model_Rate_Request $request)
40
  {
41
- if (!$this->getConfigFlag('active') || !Mage::helper('diglin_ricento')->isEnabled()) {
 
 
42
  return false;
43
  }
44
 
45
- $calculationMethod = Mage::helper('diglin_ricento')->getShippingCalculationMethod();
46
  $shippingPrice = 0;
47
  $isRicardo = false;
48
 
@@ -84,8 +87,9 @@ class Diglin_Ricento_Model_Sales_Method_Shipping
84
  /** @var Mage_Shipping_Model_Rate_Result $result */
85
  $result = Mage::getModel('shipping/rate_result');
86
 
87
- $description = Mage::getSingleton('core/session')->getRicardoShippingDescription();
88
- $shippingMethod = Mage::getSingleton('core/session')->getRicardoShippingMethod();
 
89
 
90
  $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);
91
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
16
  extends Mage_Shipping_Model_Carrier_Abstract
17
  implements Mage_Shipping_Model_Carrier_Interface
18
  {
19
+ const SHIPPING_CODE = 'ricento';
20
  /**
21
  * Carrier's code
22
  *
23
  * @var string
24
  */
25
+ protected $_code = self::SHIPPING_CODE;
26
 
27
  /**
28
  * Whether this carrier has fixed rates calculation
39
  */
40
  public function collectRates(Mage_Shipping_Model_Rate_Request $request)
41
  {
42
+ $helper = Mage::helper('diglin_ricento');
43
+
44
+ if (!$this->getConfigFlag('active') || !$helper->isEnabled()) {
45
  return false;
46
  }
47
 
48
+ $calculationMethod = $helper->getShippingCalculationMethod();
49
  $shippingPrice = 0;
50
  $isRicardo = false;
51
 
87
  /** @var Mage_Shipping_Model_Rate_Result $result */
88
  $result = Mage::getModel('shipping/rate_result');
89
 
90
+
91
+ $description = $helper->getRicardoShippingRegistry()->getRicardoShippingDescription();
92
+ $shippingMethod = $helper->getRicardoShippingRegistry()->getRicardoShippingMethod();
93
 
94
  $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);
95
 
app/code/community/Diglin/Ricento/Model/Sales/Options.php CHANGED
@@ -5,10 +5,12 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
 
 
12
  /**
13
  * Sales_Options Model
14
  *
@@ -26,6 +28,7 @@
26
  * @method int getScheduleCycleMultipleProducts()
27
  * @method int getScheduleOverwriteProductDateStart()
28
  * @method int getStockManagement()
 
29
  * @method int getCustomizationTemplate()
30
  * @method int getPromotionSpace()
31
  * @method int getPromotionStartPage()
@@ -50,6 +53,7 @@
50
  * @method Diglin_Ricento_Model_Sales_Options setScheduleCycleMultipleProducts(int $scheduleCycleMultipleProducts)
51
  * @method Diglin_Ricento_Model_Sales_Options setScheduleOverwriteProductDateStart(int $scheduleOverwriteProductDateStart)
52
  * @method Diglin_Ricento_Model_Sales_Options setStockManagement(int $stockManagement)
 
53
  * @method Diglin_Ricento_Model_Sales_Options setCustomizationTemplate(int $customizationTemplate)
54
  * @method Diglin_Ricento_Model_Sales_Options setPromotionSpace(int $promotionSpace)
55
  * @method Diglin_Ricento_Model_Sales_Options setPromotionStartPage(int $promotionStartPage)
@@ -128,4 +132,30 @@ class Diglin_Ricento_Model_Sales_Options extends Mage_Core_Model_Abstract
128
  }
129
  return '';
130
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
+ use \Diglin\Ricardo\Enums\Article\PromotionCode;
13
+
14
  /**
15
  * Sales_Options Model
16
  *
28
  * @method int getScheduleCycleMultipleProducts()
29
  * @method int getScheduleOverwriteProductDateStart()
30
  * @method int getStockManagement()
31
+ * @method string getStockManagementQtyType()
32
  * @method int getCustomizationTemplate()
33
  * @method int getPromotionSpace()
34
  * @method int getPromotionStartPage()
53
  * @method Diglin_Ricento_Model_Sales_Options setScheduleCycleMultipleProducts(int $scheduleCycleMultipleProducts)
54
  * @method Diglin_Ricento_Model_Sales_Options setScheduleOverwriteProductDateStart(int $scheduleOverwriteProductDateStart)
55
  * @method Diglin_Ricento_Model_Sales_Options setStockManagement(int $stockManagement)
56
+ * @method Diglin_Ricento_Model_Sales_Options setStockManagementQtyType(string $stockManagementQtyType)
57
  * @method Diglin_Ricento_Model_Sales_Options setCustomizationTemplate(int $customizationTemplate)
58
  * @method Diglin_Ricento_Model_Sales_Options setPromotionSpace(int $promotionSpace)
59
  * @method Diglin_Ricento_Model_Sales_Options setPromotionStartPage(int $promotionStartPage)
132
  }
133
  return '';
134
  }
135
+
136
+ /**
137
+ * @return array
138
+ */
139
+ public function getPromotionIds()
140
+ {
141
+ $promotionIds = array();
142
+
143
+ if ($this->getSalesType() == Diglin_Ricento_Model_Config_Source_Sales_Type::AUCTION
144
+ && $this->getSalesAuctionDirectBuy()
145
+ ) {
146
+ $promotionIds[] = PromotionCode::BUYNOW;
147
+ }
148
+
149
+ $space = $this->getPromotionSpace();
150
+ if ($space) {
151
+ $promotionIds[] = (int) $space;
152
+ }
153
+
154
+ $startSpace = $this->getPromotionStartPage();
155
+ if ($startSpace) {
156
+ $promotionIds[] = (int) $startSpace;
157
+ }
158
+
159
+ return $promotionIds;
160
+ }
161
  }
app/code/community/Diglin/Ricento/Model/Sales/Order/Create.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /**
13
+ * Class Diglin_Ricento_Model_Sales_Order_Create
14
+ */
15
+ class Diglin_Ricento_Model_Sales_Order_Create extends Mage_Adminhtml_Model_Sales_Order_Create
16
+ {
17
+ protected $_store = null;
18
+
19
+ /**
20
+ * @return Mage_Core_Model_Store
21
+ */
22
+ public function getStore()
23
+ {
24
+ if (is_null($this->_store)) {
25
+ $this->_store = Mage::app()->getStore($this->getStoreId());
26
+ if ($currencyId = $this->getCurrencyId()) {
27
+ $this->_store->setCurrentCurrencyCode($currencyId);
28
+ }
29
+ }
30
+ return $this->_store;
31
+ }
32
+
33
+ /**
34
+ * @param Mage_Core_Model_Store $store
35
+ * @return $this
36
+ */
37
+ public function setStore(Mage_Core_Model_Store $store)
38
+ {
39
+ $this->_store = $store;
40
+ return $this;
41
+ }
42
+
43
+ /**
44
+ * Initialize data for price rules
45
+ *
46
+ * @return Mage_Adminhtml_Model_Sales_Order_Create
47
+ */
48
+ public function initRuleData()
49
+ {
50
+ Mage::register('rule_data', new Varien_Object(array(
51
+ 'store_id' => $this->getStore()->getId(),
52
+ 'website_id' => $this->getStore()->getWebsiteId(),
53
+ 'customer_group_id' => $this->getCustomerGroupId(),
54
+ )));
55
+ return $this;
56
+ }
57
+
58
+ /**
59
+ * Prepare quote customer
60
+ *
61
+ * @return Mage_Adminhtml_Model_Sales_Order_Create
62
+ */
63
+ public function _prepareCustomer()
64
+ {
65
+ /** @var $quote Mage_Sales_Model_Quote */
66
+ $quote = $this->getQuote();
67
+ $customer = $quote->getCustomer();
68
+
69
+ // Set quote customer data to customer
70
+ $this->_setCustomerData($customer);
71
+
72
+ // Add user defined attributes to quote
73
+ $form = $this->_getCustomerForm()->setEntity($customer);
74
+ foreach ($form->getUserAttributes() as $attribute) {
75
+ $quoteCode = sprintf('customer_%s', $attribute->getAttributeCode());
76
+ $quote->setData($quoteCode, $customer->getData($attribute->getAttributeCode()));
77
+ }
78
+
79
+ if ($customer->getId()) {
80
+ // Restore account data for existing customer
81
+ $this->_getCustomerForm()
82
+ ->setEntity($customer)
83
+ ->resetEntityData();
84
+ } else {
85
+ $quote->setCustomerId(true);
86
+ }
87
+
88
+ return $this;
89
+ }
90
+
91
+ /**
92
+ * @return $this
93
+ * @throws Diglin_Ricento_Model_Sales_Order_Exception
94
+ * @throws Mage_Core_Exception
95
+ */
96
+ protected function _validate()
97
+ {
98
+ $customerId = $this->getQuote()->getCustomer()->getId();
99
+ if (is_null($customerId)) {
100
+ Mage::throwException(Mage::helper('adminhtml')->__('Please select a customer.'));
101
+ }
102
+
103
+ if (!$this->getQuote()->getStore()->getId()) {
104
+ Mage::throwException(Mage::helper('adminhtml')->__('Please select a store.'));
105
+ }
106
+ $items = $this->getQuote()->getAllItems();
107
+
108
+ if (count($items) == 0) {
109
+ $this->_errors[] = Mage::helper('adminhtml')->__('You need to specify order items.');
110
+ }
111
+
112
+ foreach ($items as $item) {
113
+ $messages = $item->getMessage(false);
114
+ if ($item->getHasError() && is_array($messages) && !empty($messages)) {
115
+ $this->_errors = array_merge($this->_errors, $messages);
116
+ }
117
+ }
118
+
119
+ if (!$this->getQuote()->isVirtual()) {
120
+ if (!$this->getQuote()->getShippingAddress()->getShippingMethod()) {
121
+ $this->_errors[] = Mage::helper('adminhtml')->__('Shipping method must be specified.');
122
+ }
123
+ }
124
+
125
+ if (!$this->getQuote()->getPayment()->getMethod()) {
126
+ $this->_errors[] = Mage::helper('adminhtml')->__('Payment method must be specified.');
127
+ } else {
128
+ $method = $this->getQuote()->getPayment()->getMethodInstance();
129
+ if (!$method) {
130
+ $this->_errors[] = Mage::helper('adminhtml')->__('Payment method instance is not available.');
131
+ } else {
132
+ if (!$method->isAvailable($this->getQuote())) {
133
+ $this->_errors[] = Mage::helper('adminhtml')->__('Payment method is not available.');
134
+ } else {
135
+ try {
136
+ $method->validate();
137
+ } catch (Mage_Core_Exception $e) {
138
+ $this->_errors[] = $e->getMessage();
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ if (!empty($this->_errors)) {
145
+ $exception = new Diglin_Ricento_Model_Sales_Order_Exception();
146
+ foreach ($this->_errors as $error) {
147
+ $exception->setMessage($error . "\n", true);
148
+ }
149
+ throw $exception;
150
+ }
151
+ return $this;
152
+ }
153
+
154
+ /**
155
+ * Create new order
156
+ *
157
+ * @return Mage_Sales_Model_Order
158
+ */
159
+ public function createOrder()
160
+ {
161
+ $this->_prepareCustomer();
162
+ $this->_validate();
163
+ $quote = $this->getQuote();
164
+ $this->_prepareQuoteItems();
165
+
166
+ $service = Mage::getModel('sales/service_quote', $quote);
167
+
168
+ $order = $service->submitOrder();
169
+
170
+ if ($this->getSendConfirmation()) {
171
+ $order->sendNewOrderEmail();
172
+ }
173
+
174
+ Mage::dispatchEvent('checkout_submit_all_after', array('order' => $order, 'quote' => $quote));
175
+
176
+ if ($order->getId()) {
177
+ $service->getQuote()->save(); // the flag $quote->setInactive is set to true but still need to save the change
178
+ }
179
+
180
+ return $order;
181
+ }
182
+ }
app/code/community/Diglin/Ricento/Model/Sales/Order/Exception.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ class Diglin_Ricento_Model_Sales_Order_Exception extends Mage_Core_Exception
13
+ {
14
+
15
+ }
app/code/community/Diglin/Ricento/Model/Sales/Transaction.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Sync/Abstract.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Sync/Job.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -31,13 +31,12 @@
31
  class Diglin_Ricento_Model_Sync_Job extends Diglin_Ricento_Model_Sync_Abstract
32
  {
33
  // TYPES OF JOB
34
- const TYPE_CHECK_LIST = 'check_list';
35
- const TYPE_LIST = 'list';
36
- const TYPE_RELIST = 'relist';
37
- const TYPE_STOP = 'stop';
38
- const TYPE_UPDATE = 'update';
39
- const TYPE_ORDER = 'order';
40
- const TYPE_SYNCLIST = 'sync_list';
41
 
42
  // PROGRESS
43
  const PROGRESS_PENDING = 'pending';
@@ -129,7 +128,7 @@ class Diglin_Ricento_Model_Sync_Job extends Diglin_Ricento_Model_Sync_Abstract
129
  if (in_array($this->getProgress(), array(self::PROGRESS_PENDING, self::PROGRESS_CHUNK_RUNNING))) {
130
  return $helper->__('Check in progress...');
131
  }
132
- break;
133
  case self::TYPE_LIST:
134
  if (in_array($this->getProgress(), array(self::PROGRESS_PENDING, self::PROGRESS_CHUNK_RUNNING))) {
135
  return $helper->__('List in progress...');
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
31
  class Diglin_Ricento_Model_Sync_Job extends Diglin_Ricento_Model_Sync_Abstract
32
  {
33
  // TYPES OF JOB
34
+ const TYPE_CHECK_LIST = 'check_list';
35
+ const TYPE_LIST = 'list';
36
+ const TYPE_STOP = 'stop';
37
+ const TYPE_ORDER = 'order';
38
+ const TYPE_SYNCLIST = 'sync_list';
39
+ const TYPE_CLOSED = 'closed';
 
40
 
41
  // PROGRESS
42
  const PROGRESS_PENDING = 'pending';
128
  if (in_array($this->getProgress(), array(self::PROGRESS_PENDING, self::PROGRESS_CHUNK_RUNNING))) {
129
  return $helper->__('Check in progress...');
130
  }
131
+ break;
132
  case self::TYPE_LIST:
133
  if (in_array($this->getProgress(), array(self::PROGRESS_PENDING, self::PROGRESS_CHUNK_RUNNING))) {
134
  return $helper->__('List in progress...');
app/code/community/Diglin/Ricento/Model/Sync/Job/Listing.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -41,6 +41,7 @@ class Diglin_Ricento_Model_Sync_Job_Listing extends Diglin_Ricento_Model_Sync_Ab
41
  {
42
  /**
43
  * Prefix of model events names
 
44
  * @var string
45
  */
46
  protected $_eventPrefix = 'sync_job_listing';
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
41
  {
42
  /**
43
  * Prefix of model events names
44
+ *
45
  * @var string
46
  */
47
  protected $_eventPrefix = 'sync_job_listing';
app/code/community/Diglin/Ricento/Model/Validate/Products/Item.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -27,6 +27,8 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
27
  const PERIOD_DAYS_MIN = 1; // in days
28
  const PERIOD_DAYS_MAX = 10; // in days
29
 
 
 
30
  /**
31
  * @var array
32
  */
@@ -61,10 +63,31 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
61
  }
62
 
63
  $item->setLoadFallbackOptions(true);
64
- $helper = Mage::helper('diglin_ricento');
65
 
66
- // Validate product content for each available store
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
 
 
 
 
 
 
68
  foreach ($stores as $store) {
69
 
70
  $item->setStoreId($store);
@@ -76,7 +99,7 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
76
  $strLen = new Zend_Validate_StringLength(array('min' => 1, 'max' => self::LENGTH_PRODUCT_TITLE));
77
  if (!$strLen->isValid($item->getProductTitle(false))) {
78
  // warning - content will be cut when exporting to ricardo
79
- $this->_warnings[] = $helper->__('Product Title will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_TITLE, $storeCode);
80
  }
81
 
82
  // Validate subtitle
@@ -84,7 +107,7 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
84
  $strLen = new Zend_Validate_StringLength(array('max' => self::LENGTH_PRODUCT_SUBTITLE));
85
  if (!$strLen->isValid($item->getProductSubtitle(false))) {
86
  // warning - content will be cut when exporting to ricardo
87
- $this->_warnings[] = $helper->__('Product Subtitle will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_SUBTITLE, $storeCode);
88
  }
89
 
90
  // Validate description
@@ -92,25 +115,38 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
92
  $strLen = new Zend_Validate_StringLength(array('min' => 1, 'max' => self::LENGTH_PRODUCT_DESCRIPTION));
93
  if (!$strLen->isValid($item->getProductDescription(false))) {
94
  // warning - content will be cut when exporting to ricardo
95
- $this->_warnings[] = $helper->__('Product Description will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_DESCRIPTION, $storeCode);
96
  }
97
  }
98
 
99
  // Reinit the product to default store
100
-
101
  $item->getProduct()->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID);
102
 
103
- // Validate custom options
 
104
 
 
 
 
 
 
105
  if ($item->getProduct()->getHasOptions()) {
106
  // warning - no option will be send to ricardo.ch
107
- $this->_warnings[] = $helper->__('Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.', Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
108
  }
109
 
110
- // Validate Inventory - In Stock or not? Enough Qty or not?
 
111
 
 
 
 
 
 
 
112
  $salesOptionsStockManagement = $item->getSalesOptions()->getStockManagement();
113
  $stockItem = $item->getProduct()->getStockItem();
 
114
 
115
  if ($stockItem->getManageStock()) {
116
  if ($salesOptionsStockManagement == -1) {
@@ -119,34 +155,57 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
119
  // if stock not managed => ok (default qty will be set to 1)
120
  } else {
121
  $qty = $salesOptionsStockManagement;
 
122
  // if stock managed, check there is enough quantity compared to $salesOptionsStockManagement
123
  // if stock is not managed => ok (default qty will be set to 1)
124
  }
125
 
126
- if (!$item->getProduct()->checkQty($qty) || !$stockItem->getIsInStock()) {
127
  // Error - Qty not available or not in stock
128
- $this->_errors[] = $helper->__('The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.');
129
  }
130
  }
131
 
132
- // Validate the currency
 
133
 
 
 
 
 
 
134
  $currencyCode = Mage::app()->getWebsite($item->getProductsListing()->getWebsiteId())->getBaseCurrencyCode();
135
  if ($currencyCode != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
136
- // Warning - Ricardo supports only CHF currency
137
- $this->_warnings[] = $helper->__('Only %s currency is supported. No conversion will be done.', Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
138
- }
139
 
140
- // Validate Category exists
 
 
 
 
 
 
 
 
141
 
 
 
 
 
 
142
  $category = $item->getCategory();
143
  if (!$category) {
144
  // error - category cannot be empty
145
- $this->_errors[] = $helper->__('You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.');
146
  }
147
 
148
- // Validate Payment and Shipping Rule
 
149
 
 
 
 
 
 
150
  $methodValidator = new Diglin_Ricento_Model_Validate_Rules_Methods();
151
  $rules = $item->getShippingPaymentRule();
152
  $methods = array(
@@ -156,11 +215,19 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
156
 
157
  if (!$methodValidator->isValid($methods)) {
158
  // Error - combination respect mandatory
159
- $this->_errors[] = $helper->__('Payment and/or Shipping combination are not correct.') . '<br>' . print_r($methodValidator->getMessages(), true);
160
  }
161
 
162
- // Validate price against buy now price > 0.05 or 0.1
 
163
 
 
 
 
 
 
 
 
164
  $salesOptions = $item->getSalesOptions();
165
  $productPrice = $item->getProductPrice();
166
 
@@ -172,12 +239,12 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
172
 
173
  if (!$greatherThanValidator->isValid($productPrice)) {
174
  // Error - Price not allowed
175
- $this->_errors[] = $helper->__('You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.', $productPrice, $minPrice);
176
  }
177
  }
178
 
179
  if (($salesOptions->getSalesType() == Diglin_Ricento_Model_Config_Source_Sales_Type::BUYNOW || $salesOptions->getSalesAuctionDirectBuy())
180
- && in_array(PaymentMethods::TYPE_CREDIT_CARD, $rules->getPaymentMethods())
181
  ) {
182
  $betweenValidator = new Zend_Validate_Between(
183
  array(
@@ -189,14 +256,33 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
189
 
190
  if (!$betweenValidator->isValid($productPrice)) {
191
  // Error - Price not allowed
192
- $this->_errors[] = $helper->__('Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.', $productPrice, self::BUYNOW_MINPRICE_FIXPRICE, self::BUYNOW_MAXPRICE_FIXPRICE);
193
  }
194
  } else if ($productPrice < self::BUYNOW_MINPRICE_FIXPRICE) {
195
- $this->_errors[] = $helper->__('Product Price of %s CHF is incorrect. Minimum price is %s.', self::BUYNOW_MINPRICE_FIXPRICE);
196
  }
 
 
197
 
198
- // Validate Ending Date
 
 
 
 
 
 
 
 
 
 
 
 
199
 
 
 
 
 
 
200
  $period = (int) $item->getSalesOptions()->getSchedulePeriodDays();
201
  $betweenValidator = new Zend_Validate_Between(
202
  array(
@@ -208,22 +294,35 @@ class Diglin_Ricento_Model_Validate_Products_Item extends Zend_Validate_Abstract
208
 
209
  if (!$betweenValidator->isValid($period)) {
210
  // Error - Period too long or too short
211
- $this->_errors[] = $helper->__('The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days', self::PERIOD_DAYS_MIN, self::PERIOD_DAYS_MAX);
212
  }
 
 
213
 
214
- // Validate picture - warning if promotions exists but no picture
215
-
 
 
 
 
 
216
  $assignedImages = $item->getProduct()->getImages();
217
- if (empty($assignedImages) && ($salesOptions->getPromotionSpace() || $salesOptions->getPromotionStartPage())) {
218
  // Warning - No promotion possible if no image in the product
219
- $this->_warnings[] = $helper->__('You cannot use the privilege spaces as you do not have any pictures for this product.');
220
  }
221
-
222
- if (count($this->_errors)) {
223
- return false;
224
  }
 
 
225
 
226
- return true;
 
 
 
 
 
227
  }
228
 
229
  /**
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
27
  const PERIOD_DAYS_MIN = 1; // in days
28
  const PERIOD_DAYS_MAX = 10; // in days
29
 
30
+ const QTY_MAX = 999;
31
+
32
  /**
33
  * @var array
34
  */
63
  }
64
 
65
  $item->setLoadFallbackOptions(true);
 
66
 
67
+ $this->validateProductStores($item, $stores);
68
+ $this->validateCustomOptions($item);
69
+ $this->validateStockManagement($item);
70
+ $this->validateCurrency($item);
71
+ $this->validateCategory($item);
72
+ $this->validatePaymentShippingRules($item);
73
+ $this->validateBuyNow($item);
74
+ $this->validateStartingDate($item);
75
+ $this->validateEndingDate($item);
76
+ $this->validatePicture($item);
77
+
78
+ if (count($this->_errors)) {
79
+ return false;
80
+ }
81
+
82
+ return true;
83
+ }
84
 
85
+ /**
86
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
87
+ * @param $stores
88
+ */
89
+ public function validateProductStores(Diglin_Ricento_Model_Products_Listing_Item $item, array $stores)
90
+ {
91
  foreach ($stores as $store) {
92
 
93
  $item->setStoreId($store);
99
  $strLen = new Zend_Validate_StringLength(array('min' => 1, 'max' => self::LENGTH_PRODUCT_TITLE));
100
  if (!$strLen->isValid($item->getProductTitle(false))) {
101
  // warning - content will be cut when exporting to ricardo
102
+ $this->_warnings[] = $this->getHelper()->__('Product Title will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_TITLE, $storeCode);
103
  }
104
 
105
  // Validate subtitle
107
  $strLen = new Zend_Validate_StringLength(array('max' => self::LENGTH_PRODUCT_SUBTITLE));
108
  if (!$strLen->isValid($item->getProductSubtitle(false))) {
109
  // warning - content will be cut when exporting to ricardo
110
+ $this->_warnings[] = $this->getHelper()->__('Product Subtitle will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_SUBTITLE, $storeCode);
111
  }
112
 
113
  // Validate description
115
  $strLen = new Zend_Validate_StringLength(array('min' => 1, 'max' => self::LENGTH_PRODUCT_DESCRIPTION));
116
  if (!$strLen->isValid($item->getProductDescription(false))) {
117
  // warning - content will be cut when exporting to ricardo
118
+ $this->_warnings[] = $this->getHelper()->__('Product Description will be cut after %s characters when published on ricardo.ch for store "%s"', self::LENGTH_PRODUCT_DESCRIPTION, $storeCode);
119
  }
120
  }
121
 
122
  // Reinit the product to default store
 
123
  $item->getProduct()->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID);
124
 
125
+ return;
126
+ }
127
 
128
+ /**
129
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
130
+ */
131
+ public function validateCustomOptions(Diglin_Ricento_Model_Products_Listing_Item $item)
132
+ {
133
  if ($item->getProduct()->getHasOptions()) {
134
  // warning - no option will be send to ricardo.ch
135
+ $this->_warnings[] = $this->getHelper()->__('Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.', Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
136
  }
137
 
138
+ return;
139
+ }
140
 
141
+ /**
142
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
143
+ */
144
+ public function validateStockManagement(Diglin_Ricento_Model_Products_Listing_Item $item)
145
+ {
146
+ // Validate Inventory - In Stock or not? Enough Qty or not?
147
  $salesOptionsStockManagement = $item->getSalesOptions()->getStockManagement();
148
  $stockItem = $item->getProduct()->getStockItem();
149
+ $type = null;
150
 
151
  if ($stockItem->getManageStock()) {
152
  if ($salesOptionsStockManagement == -1) {
155
  // if stock not managed => ok (default qty will be set to 1)
156
  } else {
157
  $qty = $salesOptionsStockManagement;
158
+ $type = $item->getSalesOptions()->getStockManagementQtyType();
159
  // if stock managed, check there is enough quantity compared to $salesOptionsStockManagement
160
  // if stock is not managed => ok (default qty will be set to 1)
161
  }
162
 
163
+ if (!$item->getProduct()->checkQty($qty, $type) || !$stockItem->getIsInStock()) {
164
  // Error - Qty not available or not in stock
165
+ $this->_errors[] = $this->getHelper()->__('The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.');
166
  }
167
  }
168
 
169
+ return;
170
+ }
171
 
172
+ /**
173
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
174
+ */
175
+ public function validateCurrency(Diglin_Ricento_Model_Products_Listing_Item $item)
176
+ {
177
  $currencyCode = Mage::app()->getWebsite($item->getProductsListing()->getWebsiteId())->getBaseCurrencyCode();
178
  if ($currencyCode != Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
 
 
 
179
 
180
+ $priceHelper = Mage::helper('diglin_ricento/price');
181
+ $rate = $priceHelper->getCurrency($currencyCode)->getRate(Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
182
+
183
+ if (empty($rate)) {
184
+ $this->_errors[] = $this->getHelper()->__('Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed.');
185
+ }
186
+ }
187
+ return;
188
+ }
189
 
190
+ /**
191
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
192
+ */
193
+ public function validateCategory(Diglin_Ricento_Model_Products_Listing_Item $item)
194
+ {
195
  $category = $item->getCategory();
196
  if (!$category) {
197
  // error - category cannot be empty
198
+ $this->_errors[] = $this->getHelper()->__('You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.');
199
  }
200
 
201
+ return;
202
+ }
203
 
204
+ /**
205
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
206
+ */
207
+ public function validatePaymentShippingRules(Diglin_Ricento_Model_Products_Listing_Item $item)
208
+ {
209
  $methodValidator = new Diglin_Ricento_Model_Validate_Rules_Methods();
210
  $rules = $item->getShippingPaymentRule();
211
  $methods = array(
215
 
216
  if (!$methodValidator->isValid($methods)) {
217
  // Error - combination respect mandatory
218
+ $this->_errors[] = $this->getHelper()->__('Payment and/or Shipping combination are not correct.') . '<br>' . print_r($methodValidator->getMessages(), true);
219
  }
220
 
221
+ return;
222
+ }
223
 
224
+ /**
225
+ * Validate price against buy now price > 0.05 or 0.1
226
+ *
227
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
228
+ */
229
+ public function validateBuyNow(Diglin_Ricento_Model_Products_Listing_Item $item)
230
+ {
231
  $salesOptions = $item->getSalesOptions();
232
  $productPrice = $item->getProductPrice();
233
 
239
 
240
  if (!$greatherThanValidator->isValid($productPrice)) {
241
  // Error - Price not allowed
242
+ $this->_errors[] = $this->getHelper()->__('You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.', $productPrice, $minPrice);
243
  }
244
  }
245
 
246
  if (($salesOptions->getSalesType() == Diglin_Ricento_Model_Config_Source_Sales_Type::BUYNOW || $salesOptions->getSalesAuctionDirectBuy())
247
+ && in_array(PaymentMethods::TYPE_CREDIT_CARD, $item->getShippingPaymentRule()->getPaymentMethods())
248
  ) {
249
  $betweenValidator = new Zend_Validate_Between(
250
  array(
256
 
257
  if (!$betweenValidator->isValid($productPrice)) {
258
  // Error - Price not allowed
259
+ $this->_errors[] = $this->getHelper()->__('Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.', $productPrice, self::BUYNOW_MINPRICE_FIXPRICE, self::BUYNOW_MAXPRICE_FIXPRICE);
260
  }
261
  } else if ($productPrice < self::BUYNOW_MINPRICE_FIXPRICE) {
262
+ $this->_errors[] = $this->getHelper()->__('Product Price of %s CHF is incorrect. Minimum price is %s.', self::BUYNOW_MINPRICE_FIXPRICE);
263
  }
264
+ return;
265
+ }
266
 
267
+ /**
268
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
269
+ */
270
+ public function validateStartingDate(Diglin_Ricento_Model_Products_Listing_Item $item)
271
+ {
272
+ $startDate = Mage::helper('diglin_ricento')->getStartingDate($item);
273
+
274
+ if (!is_null($startDate) && $startDate < (time() + 59*60)) {
275
+ // Warning - starting date must be 1 hour in future
276
+ $this->_warnings[] = $this->getHelper()->__('The starting date must start one hour in future. It will be automatically updated to list on ricardo.');
277
+ }
278
+ return;
279
+ }
280
 
281
+ /**
282
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
283
+ */
284
+ public function validateEndingDate(Diglin_Ricento_Model_Products_Listing_Item $item)
285
+ {
286
  $period = (int) $item->getSalesOptions()->getSchedulePeriodDays();
287
  $betweenValidator = new Zend_Validate_Between(
288
  array(
294
 
295
  if (!$betweenValidator->isValid($period)) {
296
  // Error - Period too long or too short
297
+ $this->_errors[] = $this->getHelper()->__('The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days', self::PERIOD_DAYS_MIN, self::PERIOD_DAYS_MAX);
298
  }
299
+ return;
300
+ }
301
 
302
+ /**
303
+ * Validate picture - warning if promotions exists but no picture
304
+ *
305
+ * @param Diglin_Ricento_Model_Products_Listing_Item $item
306
+ */
307
+ public function validatePicture(Diglin_Ricento_Model_Products_Listing_Item $item)
308
+ {
309
  $assignedImages = $item->getProduct()->getImages();
310
+ if (empty($assignedImages) && ($item->getSalesOptions()->getPromotionSpace() || $item->getSalesOptions()->getPromotionStartPage())) {
311
  // Warning - No promotion possible if no image in the product
312
+ $this->_warnings[] = $this->getHelper()->__('You cannot use the privilege spaces as you do not have any pictures for this product.');
313
  }
314
+ if (count($assignedImages) > 10) {
315
+ $this->_warnings[] = $this->getHelper()->__('Only 10 pictures maximum allowed.');
 
316
  }
317
+ return;
318
+ }
319
 
320
+ /**
321
+ * @return Diglin_Ricento_Helper_Data
322
+ */
323
+ public function getHelper()
324
+ {
325
+ return Mage::helper('diglin_ricento');
326
  }
327
 
328
  /**
app/code/community/Diglin/Ricento/Model/Validate/Rules/Methods.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Model/Validate/Sales/Increment.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Test/Model/Rule/Validate.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/Test/Model/Sales/Validate/Increment.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -15,7 +15,7 @@
15
  class Diglin_Ricento_Test_Model_Rule_Validate extends EcomDev_PHPUnit_Test_Case
16
  {
17
  /**
18
- * @var Diglin_Ricento_Model_Sales_Validate_Increment
19
  */
20
  protected $_subject;
21
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
15
  class Diglin_Ricento_Test_Model_Rule_Validate extends EcomDev_PHPUnit_Test_Case
16
  {
17
  /**
18
+ * @var Diglin_Ricento_Model_Validate_Sales_Increment
19
  */
20
  protected $_subject;
21
 
app/code/community/Diglin/Ricento/controllers/.DS_Store CHANGED
Binary file
app/code/community/Diglin/Ricento/controllers/Adminhtml/AccountController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -38,23 +38,6 @@ class Diglin_Ricento_Adminhtml_AccountController extends Mage_Adminhtml_Controll
38
 
39
  public function assistantAction()
40
  {
41
- $block = $this->getLayout()->createBlock('core/template');
42
-
43
- $block
44
- ->setTemplate('ricento/iframe.phtml')
45
- ->setTitle($this->__('ricardo.ch Assistant Portal'))
46
- ->setIframeUrl(Mage::helper('diglin_ricento')->getRicardoAssistantUrl());
47
-
48
- $ricardoLabel = $this->__('ricardo.ch');
49
- $assistantLabel = $this->__('Assistant Portal');
50
-
51
- $this->_title($assistantLabel);
52
-
53
- $this->loadLayout()
54
- ->_setActiveMenu('ricento/assistant')
55
- ->_addBreadcrumb($ricardoLabel, $ricardoLabel)
56
- ->_addBreadcrumb($assistantLabel, $assistantLabel)
57
- ->_addContent($block)
58
- ->renderLayout();
59
  }
60
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
38
 
39
  public function assistantAction()
40
  {
41
+ $this->_redirectUrl(Mage::helper('diglin_ricento')->getRicardoAssistantUrl());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
  }
app/code/community/Diglin/Ricento/controllers/Adminhtml/ApiController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  use Diglin\Ricardo\Services\ServiceAbstract;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  use Diglin\Ricardo\Services\ServiceAbstract;
app/code/community/Diglin/Ricento/controllers/Adminhtml/DashboardController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/controllers/Adminhtml/IndexController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/controllers/Adminhtml/LogController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -29,7 +29,7 @@ class Diglin_Ricento_Adminhtml_LogController extends Diglin_Ricento_Controller_A
29
 
30
  public function indexAction()
31
  {
32
- $this->_redirect('*/*/listing');
33
  }
34
 
35
  /**
@@ -39,17 +39,6 @@ class Diglin_Ricento_Adminhtml_LogController extends Diglin_Ricento_Controller_A
39
  {
40
  $this->_initAction();
41
 
42
- // $productsListing = null;
43
- // if ($this->getRequest()->getParam('id')) {
44
- // $productsListing = $this->_initListing();
45
- // $id = $productsListing->getId();
46
- // }
47
-
48
- // if ($productsListing && !empty($id)) {
49
- // $block = $this->getLayout()->createBlock('diglin_ricento/adminhtml_products_listing_log');
50
- // } else {
51
- // }
52
-
53
  $block = $this->getLayout()->createBlock('diglin_ricento/adminhtml_log', 'ricento_logs_tabs',
54
  array('active_tab' => Diglin_Ricento_Block_Adminhtml_Log_Tabs::TAB_LISTING)
55
  );
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
29
 
30
  public function indexAction()
31
  {
32
+ $this->_redirect('*/*/sync');
33
  }
34
 
35
  /**
39
  {
40
  $this->_initAction();
41
 
 
 
 
 
 
 
 
 
 
 
 
42
  $block = $this->getLayout()->createBlock('diglin_ricento/adminhtml_log', 'ricento_logs_tabs',
43
  array('active_tab' => Diglin_Ricento_Block_Adminhtml_Log_Tabs::TAB_LISTING)
44
  );
app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/CategoryController.php CHANGED
@@ -5,10 +5,14 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
 
 
 
 
12
  /**
13
  * Class Diglin_Ricento_Adminhtml_Products_CategoryController
14
  */
@@ -16,21 +20,92 @@ class Diglin_Ricento_Adminhtml_Products_CategoryController extends Diglin_Ricent
16
  {
17
  public function mappingAction()
18
  {
 
 
 
19
  $this->loadLayout();
 
20
  $this->getLayout()->getBlock('category_mapping')
21
- ->setCategoryId($this->getRequest()->getParam('id', 1));
 
 
 
 
 
22
  $this->renderLayout();
23
  }
24
 
25
  public function childrenAction()
26
  {
 
 
 
27
  $this->loadLayout();
28
  $this->getLayout()->getBlock('category_children')
29
- ->setCategoryId($this->getRequest()->getParam('id', 1))
30
- ->setLevel($this->getRequest()->getParam('level', 0));
 
 
31
  $this->renderLayout();
32
  }
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  /**
35
  * Show the categories tree to add products related to them into a product listing item
36
  */
@@ -129,6 +204,8 @@ class Diglin_Ricento_Adminhtml_Products_CategoryController extends Diglin_Ricent
129
  }
130
  }
131
 
 
 
132
  $this->_getSession()->addSuccess($this->__('%d product(s) added to the listing', $productsAdded));
133
  } catch (Exception $e) {
134
  Mage::logException($e);
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
+ use \Diglin\Ricardo\Managers\Search\Parameter\GetCategoryBestMatchParameter;
13
+ use \Diglin\Ricardo\Exceptions\SearchException;
14
+ use \Diglin\Ricardo\Enums\SearchErrors;
15
+
16
  /**
17
  * Class Diglin_Ricento_Adminhtml_Products_CategoryController
18
  */
20
  {
21
  public function mappingAction()
22
  {
23
+ $suggestedCategoriesId = (array) $this->_getSession()->getData('suggested_categories');
24
+ $categoryId = (int) $this->getRequest()->getParam('id', 1);
25
+
26
  $this->loadLayout();
27
+
28
  $this->getLayout()->getBlock('category_mapping')
29
+ ->setCategoryId($categoryId);
30
+
31
+ $this->getLayout()->getBlock('category_tree')
32
+ ->setCategoryId($categoryId)
33
+ ->setSuggestedCategoriesId($suggestedCategoriesId);
34
+
35
  $this->renderLayout();
36
  }
37
 
38
  public function childrenAction()
39
  {
40
+ $suggestedCategoriesId = (array) $this->_getSession()->getData('suggested_categories');
41
+ $categoryId = (int) $this->getRequest()->getParam('id', 1);
42
+
43
  $this->loadLayout();
44
  $this->getLayout()->getBlock('category_children')
45
+ ->setCategoryId($categoryId)
46
+ ->setLevel($this->getRequest()->getParam('level', 0))
47
+ ->setSuggestedCategoriesId($suggestedCategoriesId);
48
+
49
  $this->renderLayout();
50
  }
51
 
52
+ public function suggestAction()
53
+ {
54
+ $helper = Mage::helper('diglin_ricento');
55
+ $sentence = (string) $this->getRequest()->getParam('sentence');
56
+
57
+ $categoryBestMatchParameter = new GetCategoryBestMatchParameter();
58
+ $categoryBestMatchParameter
59
+ ->setNumberMaxOfResult(5)
60
+ ->setLanguageId($helper->getRicardoLanguageIdFromLocaleCode($helper->getDefaultSupportedLang()))
61
+ ->setSentence($sentence);
62
+
63
+ $categories = array();
64
+ $response = new Varien_Object();
65
+ $suggestedCategoriesId = array();
66
+
67
+ try {
68
+ $searchService = Mage::getSingleton('diglin_ricento/api_services_search');
69
+ $searchService->setCanUseCache(false);
70
+ $categories = $searchService->getCategoryBestMatch($categoryBestMatchParameter);
71
+ } catch (SearchException $e) {
72
+ $errorMessage = '<div class="error-msg">';
73
+ $errorMessage .= SearchErrors::getLabel($e->getCode());
74
+ $errorMessage .= '</div>';
75
+
76
+ $response->setError($errorMessage);
77
+ }
78
+
79
+ if (count($categories) > 0) {
80
+
81
+ $mapping = Mage::getModel('diglin_ricento/products_category_mapping');
82
+ $categoryId = $categories[0]['CategoryId'];
83
+
84
+ foreach ($categories as $category) {
85
+ $suggestedCategoriesId = array_merge($suggestedCategoriesId, explode('/', $mapping->getCategory($category['CategoryId'])->getPath()));
86
+ }
87
+
88
+ $block = $this->getLayout()->createBlock('diglin_ricento/adminhtml_products_category_mapping_tree');
89
+ $block
90
+ ->setCategoryId($categoryId)
91
+ ->setSuggestedCategoriesId($suggestedCategoriesId);
92
+
93
+ // array_shift($categories);
94
+
95
+ $response
96
+ ->setCategoryId($categoryId)
97
+ // ->setOtherSuggestions($categories)
98
+ ->setContent($block->toHtml())
99
+ ->setLevels($block->getLevels()) // must be after $block->toHtml()
100
+ ->setChildrenUrl($this->getUrl('ricento/products_category/children', array('id' => '#ID#', 'level' => '#LVL#')));
101
+ }
102
+
103
+ $this->_getSession()->setData('suggested_categories', $suggestedCategoriesId);
104
+
105
+ $this->getResponse()->setHeader('Content-Type', 'application/json');
106
+ $this->getResponse()->setBody($response->toJson());
107
+ }
108
+
109
  /**
110
  * Show the categories tree to add products related to them into a product listing item
111
  */
204
  }
205
  }
206
 
207
+ $this->_prepareConfigurableProduct();
208
+
209
  $this->_getSession()->addSuccess($this->__('%d product(s) added to the listing', $productsAdded));
210
  } catch (Exception $e) {
211
  Mage::logException($e);
app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/Listing/ItemController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -31,10 +31,12 @@ class Diglin_Ricento_Adminhtml_Products_Listing_ItemController extends Diglin_Ri
31
  }
32
 
33
  if ($this->_itemIds) {
34
- $itemCollection->addFieldToFilter('products_listing_id', $this->_getListing()->getId())
 
35
  ->addFieldToFilter('item_id', array('in' => $this->_itemIds));
36
  } else {
37
- $itemCollection->addFieldToFilter('item_id', array('in' => explode(',', $this->getRequest()->getPost('item_ids'))));
 
38
  $this->_itemIds = $itemCollection->getColumnValues('item_id');
39
  }
40
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
31
  }
32
 
33
  if ($this->_itemIds) {
34
+ $itemCollection
35
+ ->addFieldToFilter('products_listing_id', $this->_getListing()->getId())
36
  ->addFieldToFilter('item_id', array('in' => $this->_itemIds));
37
  } else {
38
+ $itemCollection
39
+ ->addFieldToFilter('item_id', array('in' => explode(',', $this->getRequest()->getPost('item_ids'))));
40
  $this->_itemIds = $itemCollection->getColumnValues('item_id');
41
  }
42
 
app/code/community/Diglin/Ricento/controllers/Adminhtml/Products/ListingController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -192,6 +192,7 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
192
  try {
193
  $listing->save();
194
  if ($this->saveConfiguration($data)) {
 
195
  $this->_getSession()->addSuccess($this->__('The listing has been saved.'));
196
  } else {
197
  $error = true;
@@ -281,13 +282,16 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
281
  $this->_redirectUrl($this->_getRefererUrl());
282
  return;
283
  }
284
- $productIds = (array) $this->getRequest()->getPost('product', array());
285
  $productsAdded = 0;
286
  foreach ($productIds as $productId) {
287
  if ($this->_getListing()->addProduct((int)$productId)) {
288
  ++$productsAdded;
289
  }
290
  }
 
 
 
291
  $this->_getSession()->addSuccess($this->__('%d product(s) added to the listing', $productsAdded));
292
  $this->_redirect('*/*/edit', array('id' => $this->_getListing()->getId()));
293
  }
@@ -304,12 +308,12 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
304
  }
305
 
306
  if ($this->getRequest()->isPost()) {
307
- $productIds = array_map('intval', (array) $this->getRequest()->getPost('item', array()));
308
  } else {
309
- $productIds = array_map('intval', (array) $this->getRequest()->getParam('item', array()));
310
  }
311
 
312
- list($productsRemoved, $productsNotRemoved) = $this->_getListing()->removeProductsByItemIds($productIds);
313
 
314
  if ($productsRemoved) {
315
  $this->_getSession()->addSuccess($this->__('%d products removed from listing', $productsRemoved));
@@ -319,6 +323,10 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
319
  $this->_getSession()->addNotice($this->__('%d products are listed and could not be removed', $productsNotRemoved));
320
  }
321
 
 
 
 
 
322
  $this->_redirect('*/*/edit', array('id' => $this->_getListing()->getId()));
323
  }
324
 
@@ -330,7 +338,7 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
330
  {
331
  $productListing = $this->_getListing();
332
 
333
- if (!$this->isApiReady()) {
334
  $this->_getSession()->addError($this->__('The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.'));
335
  $this->_redirectUrl($this->_getRefererUrl());
336
  return;
@@ -360,13 +368,14 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
360
  return;
361
  }
362
 
363
- // Create a job to prepare the sync to Ricardo.ch
364
-
 
365
  $job = Mage::getModel('diglin_ricento/sync_job');
366
  $job
367
  ->setJobType($jobType)
368
  ->setProgress(Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING)
369
- ->setJobMessage( (is_array($job->getJobMessage())) ? $job->getJobMessage() : array($job->getJobMessage()))
370
  ->save();
371
 
372
  $jobListing = Mage::getModel('diglin_ricento/sync_job_listing');
@@ -414,11 +423,6 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
414
  return;
415
  }
416
 
417
- if ($productListing->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED && !$this->saveAction()) {
418
- $this->_redirect('*/*/edit', array('id' => $productListing->getId()));
419
- return;
420
- }
421
-
422
  $countPendingItems = Mage::getResourceModel('diglin_ricento/products_listing_item')->countPendingItems($productListing->getId());
423
 
424
  if ($countPendingItems == 0) {
@@ -431,11 +435,13 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
431
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_CHECK_LIST, $countPendingItems);
432
  }
433
 
 
 
 
434
  public function checkAjaxAction()
435
  {
436
  $return = true;
437
  try {
438
-
439
  Mage::getSingleton('diglin_ricento/dispatcher')
440
  ->dispatch(Diglin_Ricento_Model_Sync_Job::TYPE_CHECK_LIST)
441
  ->proceed();
@@ -467,7 +473,7 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
467
 
468
  $countReadyToList = Mage::getResourceModel('diglin_ricento/products_listing_item')->coundReadyTolist($productListing->getId());
469
 
470
- if ($countReadyToList == 0) {
471
  $this->_getSession()->addError($this->__('There is no product ready to be listed. Please, add products to your products listing "%s".', $productListing->getTitle()));
472
  $this->_redirect('*/*/index');
473
  return;
@@ -479,32 +485,6 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
479
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_LIST, $countReadyToList);
480
  }
481
 
482
- /**
483
- * Start to list the product listing on ricardo platform if those was already listed and sold
484
- *
485
- * @deprecated since 18.09.2014
486
- */
487
- public function relistAction()
488
- {
489
- $productListing = $this->_initListing();
490
-
491
- if (!$productListing) {
492
- $this->_getSession()->addError('Products Listing not found.');
493
- $this->_redirectUrl($this->_getRefererUrl());
494
- return;
495
- }
496
-
497
- $countSoldItems = Mage::getResourceModel('diglin_ricento/products_listing_item')->countSoldItems($productListing->getId());
498
-
499
- if ($countSoldItems == 0) {
500
- $this->_getSession()->addError($this->__('There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.', $productListing->getId()));
501
- $this->_redirect('*/*/index');
502
- return;
503
- }
504
- $this->_successMessage = $this->_getSuccessMesageList();
505
- $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_RELIST, $countSoldItems);
506
- }
507
-
508
  /**
509
  * Stop to list all items belonging to a product list from ricardo platform
510
  */
@@ -535,7 +515,7 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
535
  return;
536
  }
537
 
538
- $this->_successMessage = $this->__('The job to stop to list your products will start in few minutes.') . $this->__('You can check the progression below.');
539
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_STOP, $countListedItem);
540
  }
541
 
@@ -561,7 +541,7 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
561
 
562
  $notDeleted = array_diff($productListings, $goingToBeDeleted);
563
  if ($notDeleted) {
564
- $this->_getSession()->addNotice($this->__('The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode(',', $notDeleted)));
565
  }
566
  }
567
  } catch (Exception $e) {
@@ -571,4 +551,80 @@ class Diglin_Ricento_Adminhtml_Products_ListingController extends Diglin_Ricento
571
 
572
  $this->_redirect('*/*/index');
573
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
574
  }
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
192
  try {
193
  $listing->save();
194
  if ($this->saveConfiguration($data)) {
195
+ $this->_prepareConfigurableProduct();
196
  $this->_getSession()->addSuccess($this->__('The listing has been saved.'));
197
  } else {
198
  $error = true;
282
  $this->_redirectUrl($this->_getRefererUrl());
283
  return;
284
  }
285
+ $productIds = (array)$this->getRequest()->getPost('product', array());
286
  $productsAdded = 0;
287
  foreach ($productIds as $productId) {
288
  if ($this->_getListing()->addProduct((int)$productId)) {
289
  ++$productsAdded;
290
  }
291
  }
292
+
293
+ $this->_prepareConfigurableProduct();
294
+
295
  $this->_getSession()->addSuccess($this->__('%d product(s) added to the listing', $productsAdded));
296
  $this->_redirect('*/*/edit', array('id' => $this->_getListing()->getId()));
297
  }
308
  }
309
 
310
  if ($this->getRequest()->isPost()) {
311
+ $itemIds = array_map('intval', (array)$this->getRequest()->getPost('item', array()));
312
  } else {
313
+ $itemIds = array_map('intval', (array)$this->getRequest()->getParam('item', array()));
314
  }
315
 
316
+ list($productsRemoved, $productsNotRemoved) = $this->_getListing()->removeProductsByItemIds($itemIds);
317
 
318
  if ($productsRemoved) {
319
  $this->_getSession()->addSuccess($this->__('%d products removed from listing', $productsRemoved));
323
  $this->_getSession()->addNotice($this->__('%d products are listed and could not be removed', $productsNotRemoved));
324
  }
325
 
326
+ if (!$productsRemoved && !$productsNotRemoved) {
327
+ $this->_getSession()->addWarning($this->__('No product found'));
328
+ }
329
+
330
  $this->_redirect('*/*/edit', array('id' => $this->_getListing()->getId()));
331
  }
332
 
338
  {
339
  $productListing = $this->_getListing();
340
 
341
+ if (!$this->_isApiReady()) {
342
  $this->_getSession()->addError($this->__('The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.'));
343
  $this->_redirectUrl($this->_getRefererUrl());
344
  return;
368
  return;
369
  }
370
 
371
+ /**
372
+ * Create a job to prepare the sync to Ricardo.ch
373
+ */
374
  $job = Mage::getModel('diglin_ricento/sync_job');
375
  $job
376
  ->setJobType($jobType)
377
  ->setProgress(Diglin_Ricento_Model_Sync_Job::PROGRESS_PENDING)
378
+ ->setJobMessage((is_array($job->getJobMessage())) ? $job->getJobMessage() : array($job->getJobMessage()))
379
  ->save();
380
 
381
  $jobListing = Mage::getModel('diglin_ricento/sync_job_listing');
423
  return;
424
  }
425
 
 
 
 
 
 
426
  $countPendingItems = Mage::getResourceModel('diglin_ricento/products_listing_item')->countPendingItems($productListing->getId());
427
 
428
  if ($countPendingItems == 0) {
435
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_CHECK_LIST, $countPendingItems);
436
  }
437
 
438
+ /**
439
+ * Start to check list after the display of the job progress
440
+ */
441
  public function checkAjaxAction()
442
  {
443
  $return = true;
444
  try {
 
445
  Mage::getSingleton('diglin_ricento/dispatcher')
446
  ->dispatch(Diglin_Ricento_Model_Sync_Job::TYPE_CHECK_LIST)
447
  ->proceed();
473
 
474
  $countReadyToList = Mage::getResourceModel('diglin_ricento/products_listing_item')->coundReadyTolist($productListing->getId());
475
 
476
+ if ($countReadyToList <= 0) {
477
  $this->_getSession()->addError($this->__('There is no product ready to be listed. Please, add products to your products listing "%s".', $productListing->getTitle()));
478
  $this->_redirect('*/*/index');
479
  return;
485
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_LIST, $countReadyToList);
486
  }
487
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  /**
489
  * Stop to list all items belonging to a product list from ricardo platform
490
  */
515
  return;
516
  }
517
 
518
+ $this->_successMessage = $this->__('The job to stop to list your products will start in few minutes.') . '&nbsp;' . $this->__('You can check the progression below.');
519
  $this->_startJobList(Diglin_Ricento_Model_Sync_Job::TYPE_STOP, $countListedItem);
520
  }
521
 
541
 
542
  $notDeleted = array_diff($productListings, $goingToBeDeleted);
543
  if ($notDeleted) {
544
+ $this->_getSession()->addNotice($this->__("The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s", implode(',', $notDeleted)));
545
  }
546
  }
547
  } catch (Exception $e) {
551
 
552
  $this->_redirect('*/*/index');
553
  }
554
+
555
+ /**
556
+ * Display the confirmation window before to check and list
557
+ */
558
+ public function confirmationAction()
559
+ {
560
+ $error = false;
561
+
562
+ $listing = $this->_initListing();
563
+ if (!$listing) {
564
+ $this->_getSession()->addError($this->__('Products Listing not found.'));
565
+ $error = true;
566
+ }
567
+
568
+ try {
569
+ if ($listing->getStatus() != Diglin_Ricento_Helper_Data::STATUS_LISTED && !$this->saveAction()) {
570
+ $error = true;
571
+ }
572
+
573
+ $this->getResponse()->clearHeader('Location'); // reset the header came from the saveAction
574
+
575
+ if (!$error) {
576
+ $articleDetails = array();
577
+ $itemsCollection = Mage::getResourceModel('diglin_ricento/products_listing_item_collection');
578
+ $itemsCollection
579
+ ->addFieldToFilter('products_listing_id', $listing->getId())
580
+ ->addFieldToFilter('status', array('nin' => array(Diglin_Ricento_Helper_Data::STATUS_LISTED, Diglin_Ricento_Helper_Data::STATUS_SOLD)));
581
+
582
+ /* @var $item Diglin_Ricento_Model_Products_Listing_Item */
583
+ foreach ($itemsCollection->getItems() as $item) {
584
+ if ($item->getType() != Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
585
+ $articleDetails[] = $item->getArticleFeeDetails();
586
+ }
587
+ }
588
+
589
+ $sell = Mage::getModel('diglin_ricento/api_services_sell');
590
+ $fees = $sell->getArticlesFee($articleDetails);
591
+
592
+ if ($fees) {
593
+
594
+ $storeCurrency = Mage::app()->getWebsite($this->_getListing()->getWebsiteId())->getDefaultStore()->getBaseCurrencyCode();
595
+ if ($storeCurrency !== Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY) {
596
+
597
+ $rate = Mage::helper('diglin_ricento/price')
598
+ ->getCurrency($storeCurrency)
599
+ ->getRate(Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY);
600
+
601
+ if (empty($rate)) {
602
+ $this->_getSession()->addError($this->__('Currency Rate not configured'));
603
+ }
604
+ }
605
+
606
+ $this->_initLayoutMessages('adminhtml/session');
607
+ $block = $this->getLayout()->createBlock('diglin_ricento/adminhtml_products_listing_confirmation', 'fees_confirmation', array('article_fees' => $fees));
608
+ echo $block->toHtml();
609
+ return;
610
+ } else {
611
+ $this->_getSession()->addError($this->__('Sorry, no product found for fees calculation.'));
612
+ $error = true;
613
+ }
614
+ }
615
+
616
+ if ($error) {
617
+ $this->_getSession()->addNotice($this->__('Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch.'));
618
+ $this->_initLayoutMessages('adminhtml/session');
619
+ $this->getResponse()->setBody($this->getLayout()->getMessagesBlock()->toHtml());
620
+ return;
621
+ }
622
+ } catch (Exception $e) {
623
+ Mage::logException($e);
624
+ $this->_getSession()->addError($this->__('An error occurred %s', $e->getMessage()));
625
+ $this->_initLayoutMessages('adminhtml/session');
626
+ $this->getResponse()->setBody($this->getLayout()->getMessagesBlock()->toHtml());
627
+ return;
628
+ }
629
+ }
630
  }
app/code/community/Diglin/Ricento/controllers/Adminhtml/SupportController.php CHANGED
@@ -5,11 +5,16 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Ricento_
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
  class Diglin_Ricento_Adminhtml_SupportController extends Mage_Adminhtml_Controller_Action
11
  {
12
  public function indexAction()
 
 
 
 
 
13
  {
14
  $supportLabel = $this->__('Ricento Extension Support');
15
 
@@ -18,7 +23,6 @@ class Diglin_Ricento_Adminhtml_SupportController extends Mage_Adminhtml_Controll
18
  $block
19
  ->setTemplate('ricento/support.phtml')
20
  ->setTitle($supportLabel);
21
- // ->setIframeUrl(Mage::helper('diglin_ricento')->getRicardoAssistantUrl());
22
 
23
  $this->_title($supportLabel);
24
 
@@ -28,4 +32,27 @@ class Diglin_Ricento_Adminhtml_SupportController extends Mage_Adminhtml_Controll
28
  ->_addContent($block)
29
  ->renderLayout();
30
  }
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Ricento_
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
  class Diglin_Ricento_Adminhtml_SupportController extends Mage_Adminhtml_Controller_Action
11
  {
12
  public function indexAction()
13
+ {
14
+ $this->_redirect('*/*/contact');
15
+ }
16
+
17
+ public function contactAction()
18
  {
19
  $supportLabel = $this->__('Ricento Extension Support');
20
 
23
  $block
24
  ->setTemplate('ricento/support.phtml')
25
  ->setTitle($supportLabel);
 
26
 
27
  $this->_title($supportLabel);
28
 
32
  ->_addContent($block)
33
  ->renderLayout();
34
  }
35
+
36
+ public function exportAction()
37
+ {
38
+ $gzDestination = Mage::helper('diglin_ricento/support')->exportAll();
39
+ return $this->_prepareDownloadResponse('ricardo_support.tar.gz', file_get_contents($gzDestination));
40
+ }
41
+
42
+ public function sendAction()
43
+ {
44
+ $helper = Mage::helper('diglin_ricento/support');
45
+
46
+ try {
47
+ $gzDestination = $helper->exportAll();
48
+ $helper->sendConfigurationFile(file_get_contents($gzDestination));
49
+ $this->_getSession()->addSuccess($this->__('Configuration successfully sent. If not already done, please <a href="mailto:%s?subject=ricardo.ch Magento Extension Support">contact us</a> to explain us your issue.', $helper->getSupportEmail()));
50
+ } catch (Exception $e) {
51
+ Mage::logException($e);
52
+ $this->_getSession()->addError('A problem occured while trying to send your configuration per email. Please, review your log file');
53
+ }
54
+
55
+ $this->_redirect('adminhtml/system_config/edit/section/ricento');
56
+
57
+ }
58
+ }
app/code/community/Diglin/Ricento/controllers/Adminhtml/SyncController.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/data/ricento_setup/data-install-1.0.0.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
app/code/community/Diglin/Ricento/data/ricento_setup/data-upgrade-1.0.18-1.1.0.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+ /* @var $installer Mage_Catalog_Model_Resource_Setup */
12
+ $installer = $this;
13
+
14
+ $installer->startSetup();
15
+
16
+ $productsListingTable = $installer->getTable('diglin_ricento/sales_options');
17
+
18
+ $installer->run("UPDATE " . $productsListingTable . " SET stock_management_qty_type = 'fix' ");
19
+
20
+ $itemTable = $installer->getTable('diglin_ricento/products_listing_item');
21
+ $productTable = $installer->getTable('catalog/product');
22
+
23
+ $installer->run("UPDATE $itemTable SET type = 'simple' WHERE product_id IN (SELECT entity_id FROM $productTable WHERE type_id = 'simple')");
24
+ $installer->run("UPDATE $itemTable SET type = 'configurable' WHERE product_id IN (SELECT entity_id FROM $productTable WHERE type_id = 'configurable')");
25
+ $installer->run("UPDATE $itemTable SET type = 'grouped' WHERE product_id IN (SELECT entity_id FROM $productTable WHERE type_id = 'grouped')");
26
+
27
+
28
+ $installer->endSetup();
app/code/community/Diglin/Ricento/etc/adminhtml.xml CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
@@ -33,16 +33,16 @@
33
  <action>ricento/log</action>
34
  <sort_order>30</sort_order>
35
  <children>
36
- <listing>
37
- <title>Listing</title>
38
- <action>ricento/log/listing</action>
39
- <sort_order>10</sort_order>
40
- </listing>
41
  <sync>
42
  <title>Synchronization</title>
43
  <action>ricento/log/sync</action>
44
- <sort_order>20</sort_order>
45
  </sync>
 
 
 
 
 
46
  </children>
47
  </log>
48
  <assistant translate="title" module="diglin_ricento">
@@ -59,6 +59,18 @@
59
  <title>Support</title>
60
  <action>ricento/support</action>
61
  <sort_order>200</sort_order>
 
 
 
 
 
 
 
 
 
 
 
 
62
  </support>
63
  </children>
64
  </ricento>
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
33
  <action>ricento/log</action>
34
  <sort_order>30</sort_order>
35
  <children>
 
 
 
 
 
36
  <sync>
37
  <title>Synchronization</title>
38
  <action>ricento/log/sync</action>
39
+ <sort_order>10</sort_order>
40
  </sync>
41
+ <listing>
42
+ <title>Listing</title>
43
+ <action>ricento/log/listing</action>
44
+ <sort_order>20</sort_order>
45
+ </listing>
46
  </children>
47
  </log>
48
  <assistant translate="title" module="diglin_ricento">
59
  <title>Support</title>
60
  <action>ricento/support</action>
61
  <sort_order>200</sort_order>
62
+ <children>
63
+ <contact>
64
+ <title>Contact</title>
65
+ <action>ricento/support/contact</action>
66
+ <sort_order>10</sort_order>
67
+ </contact>
68
+ <export>
69
+ <title>Export</title>
70
+ <action>ricento/support/export</action>
71
+ <sort_order>20</sort_order>
72
+ </export>
73
+ </children>
74
  </support>
75
  </children>
76
  </ricento>
app/code/community/Diglin/Ricento/etc/config.xml CHANGED
@@ -6,32 +6,49 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
13
  <config>
14
  <modules>
15
  <Diglin_Ricento>
16
- <version>1.0.18</version>
17
  </Diglin_Ricento>
18
  </modules>
19
 
20
  <default>
 
 
 
 
21
  <system>
22
  <messages>
23
  <notification_email_template>system_admin_notification_email_template</notification_email_template>
24
  <pm_email_template>customer_private_message_email_template</pm_email_template>
 
25
  </messages>
26
  </system>
27
 
28
  <ricento>
 
 
 
 
29
  <global>
30
  <merge_order>1</merge_order>
31
  <decrease_inventory>0</decrease_inventory>
32
  <shipping_calculation>cumulative</shipping_calculation>
33
  <email_account_creation>0</email_account_creation>
34
  <email_order_creation>0</email_order_creation>
 
 
 
 
 
 
 
 
35
  </global>
36
  <api_config>
37
  <enabled>1</enabled>
@@ -43,7 +60,8 @@
43
  <simulate_authorization>0</simulate_authorization>
44
  <email_notification>1</email_notification>
45
  <!-- it's only possible one day before to renew the API token -->
46
- <expiration_notification_delay>1</expiration_notification_delay>
 
47
  <host>ws.ricardo.ch</host>
48
  <host_dev>ws.betaqxl.com</host_dev>
49
  <lang>de,fr</lang>
@@ -253,6 +271,9 @@
253
  <stop>
254
  <class>Diglin_Ricento_Model_Dispatcher_Stop</class>
255
  </stop>
 
 
 
256
  </types>
257
  </dispatcher>
258
  </ricento>
@@ -269,6 +290,16 @@
269
  <file>ricento/private_message.html</file>
270
  <type>html</type>
271
  </customer_private_message_email_template>
 
 
 
 
 
 
 
 
 
 
272
  </email>
273
  </template>
274
 
@@ -309,6 +340,14 @@
309
  </translate>
310
 
311
  <events>
 
 
 
 
 
 
 
 
312
  <adminhtml_block_html_before>
313
  <observers>
314
  <ricardo_customer_fields>
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
13
  <config>
14
  <modules>
15
  <Diglin_Ricento>
16
+ <version>1.1.0</version>
17
  </Diglin_Ricento>
18
  </modules>
19
 
20
  <default>
21
+ <support>
22
+ <email>support[/at/]diglin.com</email>
23
+ </support>
24
+
25
  <system>
26
  <messages>
27
  <notification_email_template>system_admin_notification_email_template</notification_email_template>
28
  <pm_email_template>customer_private_message_email_template</pm_email_template>
29
+ <token_expiration_email_template>token_expiration_email_template</token_expiration_email_template>
30
  </messages>
31
  </system>
32
 
33
  <ricento>
34
+ <listing>
35
+ <merge_descriptions>0</merge_descriptions>
36
+ <nl2br>0</nl2br>
37
+ </listing>
38
  <global>
39
  <merge_order>1</merge_order>
40
  <decrease_inventory>0</decrease_inventory>
41
  <shipping_calculation>cumulative</shipping_calculation>
42
  <email_account_creation>0</email_account_creation>
43
  <email_order_creation>0</email_order_creation>
44
+ <banner>
45
+ <enabled>1</enabled>
46
+ <xml>https://pics.ricardostatic.ch/Contents/ch/magento/magento-banner.xml</xml>
47
+ </banner>
48
+ <stats>1</stats>
49
+ <stats_test_mode>0</stats_test_mode>
50
+ <stats_app_id>bza2zlst</stats_app_id>
51
+ <stats_app_id_test>xce86uyp</stats_app_id_test>
52
  </global>
53
  <api_config>
54
  <enabled>1</enabled>
60
  <simulate_authorization>0</simulate_authorization>
61
  <email_notification>1</email_notification>
62
  <!-- it's only possible one day before to renew the API token -->
63
+ <expiration_notification_delay>7</expiration_notification_delay>
64
+ <expiration_notification_validation_delay>1</expiration_notification_validation_delay>
65
  <host>ws.ricardo.ch</host>
66
  <host_dev>ws.betaqxl.com</host_dev>
67
  <lang>de,fr</lang>
271
  <stop>
272
  <class>Diglin_Ricento_Model_Dispatcher_Stop</class>
273
  </stop>
274
+ <closed>
275
+ <class>Diglin_Ricento_Model_Dispatcher_Closed</class>
276
+ </closed>
277
  </types>
278
  </dispatcher>
279
  </ricento>
290
  <file>ricento/private_message.html</file>
291
  <type>html</type>
292
  </customer_private_message_email_template>
293
+ <token_expiration_email_template translate="label" module="diglin_ricento">
294
+ <label>Admin Email Notification</label>
295
+ <file>ricento/token_expiration.html</file>
296
+ <type>text</type>
297
+ </token_expiration_email_template>
298
+ <ricento_support translate="label" module="diglin_ricento">
299
+ <label>Support Email</label>
300
+ <file>ricento/support.html</file>
301
+ <type>text</type>
302
+ </ricento_support>
303
  </email>
304
  </template>
305
 
340
  </translate>
341
 
342
  <events>
343
+ <controller_action_layout_load_before>
344
+ <observers>
345
+ <ricardo_layout_handle>
346
+ <class>Diglin_Ricento_Model_Observer</class>
347
+ <method>addLayoutHandle</method>
348
+ </ricardo_layout_handle>
349
+ </observers>
350
+ </controller_action_layout_load_before>
351
  <adminhtml_block_html_before>
352
  <observers>
353
  <ricardo_customer_fields>
app/code/community/Diglin/Ricento/etc/jstranslator.xml CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
app/code/community/Diglin/Ricento/etc/system.xml CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
@@ -36,8 +36,38 @@
36
  <show_in_store>1</show_in_store>
37
  </hint>
38
 
39
- <global module="diglin_ricento" translate="label comment">
40
- <label>Global Configuration</label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  <sort_order>10</sort_order>
42
  <show_in_default>1</show_in_default>
43
  <show_in_website>1</show_in_website>
@@ -69,10 +99,7 @@
69
  <sort_order>30</sort_order>
70
  <frontend_type>select</frontend_type>
71
  <source_model>diglin_ricento/config_source_rules_shipping_calculation</source_model>
72
- <comment><![CDATA[You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>
73
- "Highest Price": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>
74
- "Cumulative": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.
75
- ]]></comment>
76
  <show_in_default>1</show_in_default>
77
  <show_in_website>0</show_in_website>
78
  <show_in_store>0</show_in_store>
@@ -146,6 +173,16 @@
146
  <show_in_website>0</show_in_website>
147
  <show_in_store>0</show_in_store>
148
  </debug>
 
 
 
 
 
 
 
 
 
 
149
  <!--<simulate_authorization module="diglin_ricento" translate="label comment">-->
150
  <!--<label>Automatize API Authorization</label>-->
151
  <!--<frontend_type>select</frontend_type>-->
@@ -331,18 +368,6 @@
331
  <enabled>1</enabled>
332
  </depends>
333
  </partner_pass_dev_fr>
334
-
335
- <!-- @todo -->
336
- <!--<email_notification module="diglin_ricento" translate="label comment">-->
337
- <!--<label>Notification API Token Expiration</label>-->
338
- <!--<frontend_type>select</frontend_type>-->
339
- <!--<source_model>adminhtml/system_config_source_yesno</source_model>-->
340
- <!--<comment><![CDATA[Do you want to receive an email when the API Token will expire? If your API Token expires, you won't be able to use the extension until you authorize it again. Receiving a notification per email will help you to prevent such a problem.]]></comment>-->
341
- <!--<sort_order>60</sort_order>-->
342
- <!--<show_in_default>1</show_in_default>-->
343
- <!--<show_in_website>1</show_in_website>-->
344
- <!--<show_in_store>0</show_in_store>-->
345
- <!--</email_notification>-->
346
  </fields>
347
  </api_config>
348
 
@@ -394,15 +419,6 @@
394
  <show_in_website>1</show_in_website>
395
  <show_in_store>1</show_in_store>
396
  </bank_transfer_instructions>
397
- <currency translate="label">
398
- <label>Accepted Currency</label>
399
- <frontend_type>select</frontend_type>
400
- <source_model>diglin_ricento/config_source_sales_currency</source_model>
401
- <sort_order>50</sort_order>
402
- <show_in_default>1</show_in_default>
403
- <show_in_website>1</show_in_website>
404
- <show_in_store>0</show_in_store>
405
- </currency>
406
  </fields>
407
  </ricento>
408
  </groups>
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
  */
12
  -->
36
  <show_in_store>1</show_in_store>
37
  </hint>
38
 
39
+ <listing module="diglin_ricento" translate="label comment">
40
+ <label>Product Listing Configuration</label>
41
+ <sort_order>5</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>1</show_in_store>
45
+ <fields>
46
+ <merge_descriptions translate="label comment">
47
+ <label>Merge Descriptions</label>
48
+ <frontend_type>select</frontend_type>
49
+ <source_model>adminhtml/system_config_source_yesno</source_model>
50
+ <comment><![CDATA[Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description.]]></comment>
51
+ <sort_order>10</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>0</show_in_website>
54
+ <show_in_store>0</show_in_store>
55
+ </merge_descriptions>
56
+ <nl2br>
57
+ <label>Replace Carriage Return with br HTML Tag</label>
58
+ <frontend_type>select</frontend_type>
59
+ <source_model>adminhtml/system_config_source_yesno</source_model>
60
+ <comment><![CDATA[Do you want to replace into the description the carriage return with <br> HTML Tag?]]></comment>
61
+ <sort_order>20</sort_order>
62
+ <show_in_default>1</show_in_default>
63
+ <show_in_website>0</show_in_website>
64
+ <show_in_store>0</show_in_store>
65
+ </nl2br>
66
+ </fields>
67
+ </listing>
68
+
69
+ <global module="diglin_ricento" translate="label comment"><!-- for legacy reason keep "global" -->
70
+ <label>Order Configuration</label>
71
  <sort_order>10</sort_order>
72
  <show_in_default>1</show_in_default>
73
  <show_in_website>1</show_in_website>
99
  <sort_order>30</sort_order>
100
  <frontend_type>select</frontend_type>
101
  <source_model>diglin_ricento/config_source_rules_shipping_calculation</source_model>
102
+ <comment><![CDATA[You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>"Highest Price": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>"Cumulative": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.]]></comment>
 
 
 
103
  <show_in_default>1</show_in_default>
104
  <show_in_website>0</show_in_website>
105
  <show_in_store>0</show_in_store>
173
  <show_in_website>0</show_in_website>
174
  <show_in_store>0</show_in_store>
175
  </debug>
176
+ <email_notification module="diglin_ricento" translate="label comment">
177
+ <label>Email notification</label>
178
+ <frontend_type>select</frontend_type>
179
+ <source_model>adminhtml/system_config_source_yesno</source_model>
180
+ <comment><![CDATA[Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc...]]></comment>
181
+ <sort_order>13</sort_order>
182
+ <show_in_default>1</show_in_default>
183
+ <show_in_website>0</show_in_website>
184
+ <show_in_store>0</show_in_store>
185
+ </email_notification>
186
  <!--<simulate_authorization module="diglin_ricento" translate="label comment">-->
187
  <!--<label>Automatize API Authorization</label>-->
188
  <!--<frontend_type>select</frontend_type>-->
368
  <enabled>1</enabled>
369
  </depends>
370
  </partner_pass_dev_fr>
 
 
 
 
 
 
 
 
 
 
 
 
371
  </fields>
372
  </api_config>
373
 
419
  <show_in_website>1</show_in_website>
420
  <show_in_store>1</show_in_store>
421
  </bank_transfer_instructions>
 
 
 
 
 
 
 
 
 
422
  </fields>
423
  </ricento>
424
  </groups>
app/code/community/Diglin/Ricento/sql/ricento_setup/install-1.0.0.php CHANGED
@@ -4,7 +4,7 @@
4
  *
5
  * @category Diglin
6
  * @package Diglin_Ricento
7
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
8
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
  */
10
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
4
  *
5
  * @category Diglin
6
  * @package Diglin_Ricento
7
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
8
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
  */
10
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
app/code/community/Diglin/Ricento/sql/ricento_setup/uninstall.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/code/community/Diglin/Ricento/sql/ricento_setup/upgrade-1.0.18-1.1.0.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Ricento
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ */
10
+ /* @var $installer Mage_Catalog_Model_Resource_Setup */
11
+ $installer = $this;
12
+
13
+ $installer->startSetup();
14
+
15
+ $salesOptionsTable = $installer->getTable('diglin_ricento/sales_options');
16
+ $itemTable = $installer->getTable('diglin_ricento/products_listing_item');
17
+ $apiTokenTable = $installer->getTable('diglin_ricento/api_token');
18
+ $transactionTable = $installer->getTable('diglin_ricento/sales_transaction');
19
+
20
+ $installer->getConnection()->modifyColumn($salesOptionsTable, 'sales_auction_increment', "decimal(12,4) NOT NULL DEFAULT '1.0000' COMMENT 'Sales_auction_increment'");
21
+ $installer->getConnection()->addColumn($salesOptionsTable, 'stock_management_qty_type', array(
22
+ 'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
23
+ 'length' => 10,
24
+ 'nullable' => false,
25
+ 'unsigned' => false,
26
+ 'default' => Diglin_Ricento_Helper_Data::INVENTORY_QTY_TYPE_FIX,
27
+ 'after' => 'stock_management',
28
+ 'comment' => 'Stock Management Quantity Type'));
29
+
30
+ $installer->getConnection()->addColumn($apiTokenTable, 'merchant_notified', array(
31
+ 'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
32
+ 'length' => 4,
33
+ 'nullable' => false,
34
+ 'unsigned' => false,
35
+ 'default' => 0,
36
+ 'after' => 'session_expiration_date',
37
+ 'comment' => 'Merchant is notified'));
38
+
39
+ $installer->getConnection()->addColumn($itemTable, 'type', array(
40
+ 'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
41
+ 'length' => 255,
42
+ 'nullable' => false,
43
+ 'unsigned' => false,
44
+ 'default' => 'simple',
45
+ 'after' => 'product_id',
46
+ 'comment' => 'Type of product'));
47
+
48
+ $installer->getConnection()->addColumn($transactionTable, 'currency', array(
49
+ 'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
50
+ 'length' => 4,
51
+ 'nullable' => false,
52
+ 'default' => 'CHF',
53
+ 'after' => 'total_bid_price',
54
+ 'comment' => 'Currency'));
55
+
56
+ $installer->updateAttribute(Mage_Catalog_Model_Product::ENTITY, 'ricardo_description', 'is_global', Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE);
57
+ $installer->updateAttribute(Mage_Catalog_Model_Product::ENTITY, 'ricardo_title', 'is_global', Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE);
58
+ $installer->updateAttribute(Mage_Catalog_Model_Product::ENTITY, 'ricardo_subtitle', 'is_global', Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE);
59
+
60
+ $installer->endSetup();
app/code/community/Diglin/Ricento/sql/ricento_setup/upgrade-1.0.8-1.0.9.php CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
11
  $installer = $this;
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Ricento
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  */
10
  /* @var $installer Mage_Catalog_Model_Resource_Setup */
11
  $installer = $this;
app/design/adminhtml/default/default/layout/ricento.xml CHANGED
@@ -6,7 +6,7 @@
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
10
  */
11
  -->
12
  <layout>
@@ -28,6 +28,12 @@
28
  </reference>
29
  </default>
30
 
 
 
 
 
 
 
31
  <ricento_scripts>
32
  <reference name="head">
33
  <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
@@ -39,7 +45,7 @@
39
 
40
  <ricento_dashboard_index>
41
  <reference name="content">
42
- <block type="core/template" name="ricento_dashboard" as="ricento.dashboard"
43
  template="ricento/dashboard.phtml">
44
  <block type="core/text_list" name="ricento_dashboard_left" as="ricento.dashboard.left">
45
  <block type="adminhtml/template" name="ricento_dashboard_toolbar" as="ricento.dashboard.toolbar"
@@ -54,14 +60,12 @@
54
  template="ricento/dashboard/news.phtml"/>
55
  </block>
56
  <block type="core/text_list" name="ricento_dashboard_right" as="ricento.dashboard.right">
57
- <block type="diglin_ricento/adminhtml_dashboard_lifetime" name="ricento_dashboard_lifetime"
58
- as="ricento.dashboard.lifetime"
59
- template="ricento/dashboard/lifeturnover.phtml"/>
60
- <block type="adminhtml/template" name="ricento_dashboard_turnover" as="ricento.dashboard.turnover"
61
- template="ricento/dashboard/turnover.phtml">
62
- <block type="diglin_ricento/adminhtml_dashboard_turnover" name="ricento_dashboard_turnover_graph" as="ricento.dashboard.turnover.graph" />
63
  </block>
64
- <block type="core/template" name="ricento_dashboard_bestsellers" as="ricento.dashboard.bestsellers"
65
  template="ricento/dashboard/bestsellers.phtml">
66
  <block type="diglin_ricento/adminhtml_dashboard_bestsellers"
67
  name="ricento_dashboard_bestsellers_grid"
@@ -91,7 +95,7 @@
91
  <block type="diglin_ricento/adminhtml_products_listing_edit_tabs" name="products_listing_edit_tabs" />
92
  </reference>
93
  </ricento_products_listing_edit>
94
-
95
  <ricento_products_listing_addproductspopup>
96
  <update handle="overlay_popup" />
97
  <remove name="footer" />
@@ -128,7 +132,9 @@
128
  <update handle="overlay_popup" />
129
  <remove name="footer" />
130
  <reference name="content">
131
- <block type="diglin_ricento/adminhtml_products_category_mapping" name="category_mapping" template="ricento/products/category/mapping.phtml"/>
 
 
132
  </reference>
133
  </ricento_products_category_mapping>
134
 
@@ -140,7 +146,7 @@
140
  <adminhtml_catalog_category_edit>
141
  <update handle="ricento_scripts" />
142
  </adminhtml_catalog_category_edit>
143
-
144
  <ricento_products_category_showcategoriestree>
145
  <update handle="overlay_popup" />
146
  <remove name="footer" />
6
  * @author Sylvain Rayé <support at diglin.com>
7
  * @category Diglin
8
  * @package Diglin_Ricento
9
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
10
  */
11
  -->
12
  <layout>
28
  </reference>
29
  </default>
30
 
31
+ <ricento>
32
+ <reference name="before_body_end">
33
+ <block type="adminhtml/template" name="stats" as="stats" template="ricento/stats.phtml" />
34
+ </reference>
35
+ </ricento>
36
+
37
  <ricento_scripts>
38
  <reference name="head">
39
  <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
45
 
46
  <ricento_dashboard_index>
47
  <reference name="content">
48
+ <block type="adminhtml/template" name="ricento_dashboard" as="ricento.dashboard"
49
  template="ricento/dashboard.phtml">
50
  <block type="core/text_list" name="ricento_dashboard_left" as="ricento.dashboard.left">
51
  <block type="adminhtml/template" name="ricento_dashboard_toolbar" as="ricento.dashboard.toolbar"
60
  template="ricento/dashboard/news.phtml"/>
61
  </block>
62
  <block type="core/text_list" name="ricento_dashboard_right" as="ricento.dashboard.right">
63
+ <block type="diglin_ricento/adminhtml_dashboard_banner" name="plp_banner" as="plp.banner" template="ricento/dashboard/banner.phtml"/>
64
+ <block type="diglin_ricento/adminhtml_dashboard_lifetime" name="ricento_dashboard_lifetime" as="ricento.dashboard.lifetime" template="ricento/dashboard/lifeturnover.phtml"/>
65
+ <block type="adminhtml/template" name="ricento_dashboard_turnover" as="ricento.dashboard.turnover" template="ricento/dashboard/turnover.phtml">
66
+ <block type="diglin_ricento/adminhtml_dashboard_turnover" name="ricento_dashboard_turnover_graph" as="ricento.dashboard.turnover.graph"/>
 
 
67
  </block>
68
+ <block type="adminhtml/template" name="ricento_dashboard_bestsellers" as="ricento.dashboard.bestsellers"
69
  template="ricento/dashboard/bestsellers.phtml">
70
  <block type="diglin_ricento/adminhtml_dashboard_bestsellers"
71
  name="ricento_dashboard_bestsellers_grid"
95
  <block type="diglin_ricento/adminhtml_products_listing_edit_tabs" name="products_listing_edit_tabs" />
96
  </reference>
97
  </ricento_products_listing_edit>
98
+
99
  <ricento_products_listing_addproductspopup>
100
  <update handle="overlay_popup" />
101
  <remove name="footer" />
132
  <update handle="overlay_popup" />
133
  <remove name="footer" />
134
  <reference name="content">
135
+ <block type="diglin_ricento/adminhtml_products_category_mapping" name="category_mapping">
136
+ <block type="diglin_ricento/adminhtml_products_category_mapping_tree" name="category_tree" as="category_tree" />
137
+ </block>
138
  </reference>
139
  </ricento_products_category_mapping>
140
 
146
  <adminhtml_catalog_category_edit>
147
  <update handle="ricento_scripts" />
148
  </adminhtml_catalog_category_edit>
149
+
150
  <ricento_products_category_showcategoriestree>
151
  <update handle="overlay_popup" />
152
  <remove name="footer" />
app/design/adminhtml/default/default/template/ricento/dashboard.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Mage_Adminhtml_Block_Template */
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Mage_Adminhtml_Block_Template */
app/design/adminhtml/default/default/template/ricento/dashboard/account.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/dashboard/banner.phtml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /** @var $this Diglin_Ricento_Block_Adminhtml_Dashboard_Banner */
13
+
14
+ ?>
15
+ <?php if ($this->isEnabled() && $this->getBannerSrc()): ?>
16
+ <div class="entry-edit">
17
+ <a href="<?php echo $this->getBannerUrl() ?>" target="_blank"><img class="banner" src="<?php echo $this->getBannerSrc(); ?>" title="<?php echo $this->getBannerTitle() ?>" alt="<?php echo $this->getBannerTitle() ?>" height="90px" width="728px" /></a>
18
+ </div>
19
+ <?php endif; ?>
app/design/adminhtml/default/default/template/ricento/dashboard/bestsellers.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/dashboard/lifeturnover.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/dashboard/news.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/dashboard/toolbar.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/dashboard/turnover.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/dashboard/turnover/graph.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /** @var $this Diglin_Ricento_Block_Adminhtml_Dashboard_Turnover */
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /** @var $this Diglin_Ricento_Block_Adminhtml_Dashboard_Turnover */
app/design/adminhtml/default/default/template/ricento/iframe.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @see Diglin_Ricento_Adminhtml_AccountController */
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @see Diglin_Ricento_Adminhtml_AccountController */
app/design/adminhtml/default/default/template/ricento/js/rules/validate/paymentshipping.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  $paymentValidationMessage = $this->getPaymentValidationMessage();
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  $paymentValidationMessage = $this->getPaymentValidationMessage();
app/design/adminhtml/default/default/template/ricento/js/salesoptions/validate/increment.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  $incrementValidationMessage = $this->getErrorMessage();
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  $incrementValidationMessage = $this->getErrorMessage();
app/design/adminhtml/default/default/template/ricento/js/sync/progress.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/log.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/notifications/configured.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/notifications/expiration.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -22,7 +22,7 @@ $website = Mage::app()->getWebsite();
22
  <?php if ($this->getApiReady()): ?>
23
  <div class="notification-global">
24
  <?php if ($this->isApiCredentialTokenExist($website)): ?>
25
- <strong><?php echo $this->__('Your ricardo.ch API token credentials are going to expire in %s days for the website "%s".', $this->getExpirationNotificationDelay(), $website->getName());?></strong>
26
  <?php else: ?>
27
  <strong><?php echo $this->__('No ricardo.ch API Authorization have been found for the website "%s".', $website->getName());?></strong>
28
  <?php endif; ?>
@@ -30,9 +30,11 @@ $website = Mage::app()->getWebsite();
30
  $validationUrl = $this->getValidationUrl($website);
31
  if (empty($validationUrl)) {
32
  echo Mage::helper('diglin_ricento')->__('Security error occurred with the ricardo API. Please, check your log files and your <a href="%s">API configuration</a>.', Mage::helper('diglin_ricento')->getConfigurationUrl($website));
33
- } else {
34
  echo $this->__('You have to authorize your account to get access to the ricardo.ch API thanks to the <a href="%s">ricardo.ch Authorization Page</a>. If you don\'t do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked.',
35
  $validationUrl); ?>
 
 
36
  <?php } ?>
37
  <?php echo $this->__('To hide this message, you have to <a href="%s">disable the extension</a>.', Mage::helper('diglin_ricento')->getConfigurationUrl($website)); ?>
38
  </div>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
22
  <?php if ($this->getApiReady()): ?>
23
  <div class="notification-global">
24
  <?php if ($this->isApiCredentialTokenExist($website)): ?>
25
+ <strong><?php echo $this->__('Your ricardo.ch API token credentials are going to expire in %s days for the website "%s".', $this->getDelayExpirationDays($website->getId()), $website->getName());?></strong>
26
  <?php else: ?>
27
  <strong><?php echo $this->__('No ricardo.ch API Authorization have been found for the website "%s".', $website->getName());?></strong>
28
  <?php endif; ?>
30
  $validationUrl = $this->getValidationUrl($website);
31
  if (empty($validationUrl)) {
32
  echo Mage::helper('diglin_ricento')->__('Security error occurred with the ricardo API. Please, check your log files and your <a href="%s">API configuration</a>.', Mage::helper('diglin_ricento')->getConfigurationUrl($website));
33
+ } else if ($this->canApiAuthorizationBeTriggered($website)) {
34
  echo $this->__('You have to authorize your account to get access to the ricardo.ch API thanks to the <a href="%s">ricardo.ch Authorization Page</a>. If you don\'t do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked.',
35
  $validationUrl); ?>
36
+ <?php } else {
37
+ echo $this->__('The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible.', $this->getExpirationNotificationValidationDelay($website->getDefaultStore()->getId())); ?>
38
  <?php } ?>
39
  <?php echo $this->__('To hide this message, you have to <a href="%s">disable the extension</a>.', Mage::helper('diglin_ricento')->getConfigurationUrl($website)); ?>
40
  </div>
app/design/adminhtml/default/default/template/ricento/payment/info/default.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/payment/info/pdf/default.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  ?>
app/design/adminhtml/default/default/template/ricento/products/category/children.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -15,13 +15,14 @@ $level = $this->getLevel();
15
  <nav class="span<?php echo $level?> navCat" id=navCatLvl<?php echo $level?>>
16
  <ul class="nav nav-list">
17
  <?php foreach ($this->getCategories() as $category): ?>
18
- <li class="<?php if ($category->getIsFinal()): ?>final<?php endif; ?><?php if ($this->getSelectedCategoryId() == $category->getId()): ?> selected<?php endif; ?>" >
19
  <a href="#"
20
  data-category-id="<?php echo $category->getId(); ?>"
21
  data-update-prefix = "navCatLvl"
22
  data-level = "<?php echo $level; ?>"
23
  data-update-level = "<?php echo $level + 1; ?>"
24
  data-is-final = "<?php echo $category->getIsFinal(); ?>"
 
25
  data-text = "<?php echo $category->getCategoryName(); ?>">
26
  <?php if (!$category->getIsFinal()): ?>
27
  <strong class="icon icon-plus">&gt;</strong>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
15
  <nav class="span<?php echo $level?> navCat" id=navCatLvl<?php echo $level?>>
16
  <ul class="nav nav-list">
17
  <?php foreach ($this->getCategories() as $category): ?>
18
+ <li class="<?php if ($category->getIsFinal()): ?>final<?php endif; ?><?php if ($this->getSelectedCategoryId() == $category->getId()): ?> selected<?php endif; ?> <?php echo (in_array($category->getId(), $this->getSuggestedCategoriesId()) ? 'suggested' : ''); ?>" >
19
  <a href="#"
20
  data-category-id="<?php echo $category->getId(); ?>"
21
  data-update-prefix = "navCatLvl"
22
  data-level = "<?php echo $level; ?>"
23
  data-update-level = "<?php echo $level + 1; ?>"
24
  data-is-final = "<?php echo $category->getIsFinal(); ?>"
25
+ data-is-suggested = "<?php echo (in_array($category->getId(), $this->getSuggestedCategoriesId()) ? 1 : 0); ?>"
26
  data-text = "<?php echo $category->getCategoryName(); ?>">
27
  <?php if (!$category->getIsFinal()): ?>
28
  <strong class="icon icon-plus">&gt;</strong>
app/design/adminhtml/default/default/template/ricento/products/category/mapping.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping */
@@ -16,14 +16,13 @@
16
  <button type="button" onclick="Ricento.closePopup()" class="cancel button" id="ricardo_categories_button_cancel"><span><?php echo $this->__('Cancel'); ?></span></button>
17
  <button type="submit" class="save button" id="ricardo_categories_button_save"><span><?php echo $this->__('Confirm');?></span></button>
18
  </div>
19
- <?php
20
- echo $this->getChildHtml('toplevel');
21
- ?>
22
- <div id="ricardo_children">
23
- <?php
24
- echo $this->getChildHtml('sublevel');
25
- ?>
26
  </div>
 
 
 
27
  <input type="hidden" name="ricardo_category_selected_title" id="ricardo_category_selected_title" value="" />
28
  <div class="form-buttons">
29
  <button type="button" onclick="Ricento.closePopup()" class="cancel button" id="ricardo_categories_button_cancel"><span><?php echo $this->__('Cancel'); ?></span></button>
@@ -31,10 +30,10 @@
31
  </div>
32
  </form>
33
  </div>
34
-
35
  <script type="text/javascript">
36
  categoryMapper = new Ricento.CategoryMappper({
37
  wrapperElement : 'ricardo_categories',
38
  loadChildrenUrl : '<?php echo $this->getUrl('ricento/products_category/children', array('id' => '#ID#', 'level' => '#LVL#')); ?>'
39
  });
 
40
  </script>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Diglin_Ricento_Block_Adminhtml_Products_Category_Mapping */
16
  <button type="button" onclick="Ricento.closePopup()" class="cancel button" id="ricardo_categories_button_cancel"><span><?php echo $this->__('Cancel'); ?></span></button>
17
  <button type="submit" class="save button" id="ricardo_categories_button_save"><span><?php echo $this->__('Confirm');?></span></button>
18
  </div>
19
+ <div class="category-suggestion">
20
+ <input type="text" id="ricardo_categories_suggest" name="ricardo_categories_suggest" value="<?php echo $this->__('Enter product name: e.g. iphone'); ?>" />
21
+ <div id="other-suggestions"></div>
 
 
 
 
22
  </div>
23
+
24
+ <?php echo $this->getChildHtml('category_tree'); ?>
25
+
26
  <input type="hidden" name="ricardo_category_selected_title" id="ricardo_category_selected_title" value="" />
27
  <div class="form-buttons">
28
  <button type="button" onclick="Ricento.closePopup()" class="cancel button" id="ricardo_categories_button_cancel"><span><?php echo $this->__('Cancel'); ?></span></button>
30
  </div>
31
  </form>
32
  </div>
 
33
  <script type="text/javascript">
34
  categoryMapper = new Ricento.CategoryMappper({
35
  wrapperElement : 'ricardo_categories',
36
  loadChildrenUrl : '<?php echo $this->getUrl('ricento/products_category/children', array('id' => '#ID#', 'level' => '#LVL#')); ?>'
37
  });
38
+ categoryMapper.initAutocomplete('<?php echo $this->getSuggestUrl() ?>', 'category-tree', '<?php echo $this->__('Enter product name: e.g. iphone'); ?>');
39
  </script>
app/design/adminhtml/default/default/template/ricento/products/category/mapping/tree.phtml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <sylvain.raye at diglin.com>
6
+ * @category Ricento
7
+ * @package Ricento
8
+ * @copyright Copyright (c) 2011-2014 Diglin (http://www.diglin.com)
9
+ */
10
+ ?>
11
+ <div id="category-tree">
12
+ <?php echo $this->getChildHtml('toplevel'); ?>
13
+ <div id="ricardo_children">
14
+ <?php echo $this->getChildHtml('sublevel'); ?>
15
+ </div>
16
+ </div>
app/design/adminhtml/default/default/template/ricento/products/listing/confirmation.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <sylvain.raye at diglin.com>
6
+ * @category Ricento
7
+ * @package Ricento
8
+ * @copyright Copyright (c) 2011-2014 Diglin (http://www.diglin.com)
9
+ */
10
+
11
+ /**
12
+ * @var $this Diglin_Ricento_Block_Adminhtml_Products_Listing_Confirmation
13
+ */
14
+
15
+ $articleFees = $this->getArticleFees();
16
+ $listingFees = $this->getListingFees();
17
+ ?>
18
+ <div id="messages">
19
+ <?php echo $this->getMessagesBlock()->getGroupedHtml(); ?>
20
+ </div>
21
+ <table>
22
+ <thead>
23
+ <tr>
24
+ <th><?php echo $this->__('Product listing & promotion'); ?></th>
25
+ <th><?php echo $this->__('Qty'); ?></th>
26
+ <th><?php echo $this->__('Unit Price'); ?></th>
27
+ <th><?php echo $this->__('Total price'); ?></th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <?php foreach ($articleFees as $articleFee): ?>
32
+ <tr>
33
+ <td><?php echo $articleFee['label'] ?></td>
34
+ <td><?php echo $articleFee['qty'] ?></td>
35
+ <td><?php echo $this->formatPrice($articleFee['unit_price']) ?></td>
36
+ <td><?php echo $this->formatPrice($articleFee['total_price']) ?></td>
37
+ </tr>
38
+ <?php endforeach; ?>
39
+ <tr>
40
+ <td><?php echo $this->__('Listing Fees') ?></td>
41
+ <td><?php echo $listingFees['qty'] ?></td>
42
+ <td><?php echo $this->formatPrice($listingFees['unit_price']) ?></td>
43
+ <td><?php echo $this->formatPrice($listingFees['total_price']) ?></td>
44
+ </tr>
45
+ </tbody>
46
+ <tfoot>
47
+ <tr>
48
+ <td colspan="3"><?php echo $this->__('Total') ?></td>
49
+ <td><?php echo $this->getTotalFee() ?></td>
50
+ </tr>
51
+ </tfoot>
52
+ </table>
53
+ <div class="terms">
54
+ <h3><?php echo $this->__('Important'); ?></h3>
55
+ <ul>
56
+ <li><?php echo $this->__('ricardo.ch does invoices in %s', Diglin_Ricento_Helper_Data::ALLOWED_CURRENCY); ?></li>
57
+ <li><?php echo $this->__('Sales Fee (following the <a href="%s" target="_blank">fees rules from 01.07.2014</a>)', $this->getFeesRulesUrl()); ?></li>
58
+ <li><?php echo $this->__('With the confirmation of the publication, you accept the <a href="%s" target="_blank">terms and conditions</a> and <a href="%s" target="_blank">privacy policy</a>', $this->getTermsUrl(), $this->getPrivacyUrl()); ?></li>
59
+ </ul>
60
+ </div>
61
+ <form id="confirmation_fee" name="confirmation_fee" enctype="application/x-www-form-urlencoded" action="<?php echo $this->getFormUrl(); ?>">
62
+ <input type="hidden" name="id" id="id" value="<?php echo $this->getProductsListingId(); ?>" />
63
+ <input name="form_key" type="hidden" value="<?php echo $this->getFormKey(); ?>" />
64
+ <button class="scalable save"><span><span><?php echo $this->__('Confirm, check and List') ?></span></span></button>
65
+ </form>
app/design/adminhtml/default/default/template/ricento/products/listing/item/edit/form.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Diglin_Ricento_Block_Adminhtml_Products_Listing_Item_Edit_Form */ ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
  /* @var $this Diglin_Ricento_Block_Adminhtml_Products_Listing_Item_Edit_Form */ ?>
app/design/adminhtml/default/default/template/ricento/products/listing/item/preview.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
app/design/adminhtml/default/default/template/ricento/stats.phtml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ricardo.ch AG - Switzerland
4
+ *
5
+ * @author Sylvain Rayé <support at diglin.com>
6
+ * @category Diglin
7
+ * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+
12
+ /* @var $this Mage_Core_Block_Template */
13
+
14
+ $user = Mage::getSingleton('admin/session')->getUser();
15
+ $isEnabled = Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_STATS);
16
+ $testMode = Mage::getStoreConfigFlag(Diglin_Ricento_Helper_Data::CFG_STATS_TEST_MODE);
17
+ $appid = ($testMode) ? Mage::getStoreConfig(Diglin_Ricento_Helper_Data::CFG_STATS_APPID_TEST) : Mage::getStoreConfig(Diglin_Ricento_Helper_Data::CFG_STATS_APPID);
18
+
19
+ if ($isEnabled && $user && $user->getUsername()):
20
+ ?>
21
+ <script>
22
+ window.intercomSettings = {
23
+ name: "<?php echo $user->getFirstname() . ' ' . $user->getLastname(); ?>",
24
+ email: "<?php echo $user->getEmail(); ?>",
25
+ created_at: <?php echo strtotime($user->getCreated()); ?>,
26
+ app_id: "<?php echo $appid ?>"
27
+ };
28
+ </script>
29
+ <script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/<?php echo $appid ?>';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>
30
+ <?php endif; ?>
app/design/adminhtml/default/default/template/ricento/support.phtml CHANGED
@@ -5,10 +5,12 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
 
 
12
  /**
13
  * @todo:
14
  * - Provide in the mailto information about the user or shop
@@ -49,13 +51,14 @@
49
  ('Diglin_Ricento')->version; ?></strong></p>
50
  <h2>License & support</h2>
51
  <p>This extension has been realized for <a href="http://www.ricardo.ch">ricardo.ch</a> in collaboration with
52
- <a href="http://www.diglin.com">Diglin GmbH</a>. This extension is licensed under the <a
53
- href="http://opensource
54
- .org/licenses/osl-3.0.php">OSL 3.0</a> license. <a href="http://www.ricardo.ch">ricardo.ch</a> or <a
55
- href="http://www.diglin.com">Diglin GmbH</a> are not responsible for any damages or lost. Support may be provided free of
56
- charge or against payment depending on the support needed e.g. Installation, Configuration,
57
  Custom development, Problem due to conflict with other extensions or misusing,
58
  etc. <a href="mailto:support@diglin.com?subject=Support for Ricento Extension">Contact us</a> for details.</p>
 
 
59
  <h2>Imprint</h2>
60
  <div class="ricardo-imprint">
61
  <p>ricardo.ch AG</p>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
12
+ /* @var $this Mage_Core_Block_Template */
13
+
14
  /**
15
  * @todo:
16
  * - Provide in the mailto information about the user or shop
51
  ('Diglin_Ricento')->version; ?></strong></p>
52
  <h2>License & support</h2>
53
  <p>This extension has been realized for <a href="http://www.ricardo.ch">ricardo.ch</a> in collaboration with
54
+ <a href="http://www.diglin.com">Diglin GmbH</a>. This extension is licensed under the
55
+ <a href="http://opensource.org/licenses/osl-3.0.php">OSL 3.0</a> license. <a href="http://www.ricardo.ch">ricardo.ch</a> or
56
+ <a href="http://www.diglin.com">Diglin GmbH</a> are not responsible for any damages or lost.</p>
57
+ <p>Support is provided against payment depending on the support needed e.g. Installation, Configuration,
 
58
  Custom development, Problem due to conflict with other extensions or misusing,
59
  etc. <a href="mailto:support@diglin.com?subject=Support for Ricento Extension">Contact us</a> for details.</p>
60
+ <button type="button" onclick="window.location.href='<?php echo $this->getUrl('ricento/support/send') ?>'"><span><span><?php echo $this->__('Send us your configuration') ?></span></span></button>
61
+ <button type="button" onclick="window.location.href='<?php echo $this->getUrl('ricento/support/export') ?>'"><span><span><?php echo $this->__('Export your configuration') ?></span></span></button>
62
  <h2>Imprint</h2>
63
  <div class="ricardo-imprint">
64
  <p>ricardo.ch AG</p>
app/design/adminhtml/default/default/template/ricento/sync/check/popup.phtml CHANGED
@@ -5,7 +5,7 @@
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
- * @copyright Copyright (c) 2014 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
@@ -19,7 +19,6 @@ $helper = Mage::helper('diglin_ricento');
19
  <ul class="messages">
20
  <?php if (count($messages)) { ?>
21
  <?php foreach ($messages as $message) { ?>
22
-
23
  <?php if (isset($message['name'])) { ?>
24
  <h2><?php echo $message['name'] ?></h2>
25
  <?php } ?>
5
  * @author Sylvain Rayé <support at diglin.com>
6
  * @category Diglin
7
  * @package Diglin_Ricento
8
+ * @copyright Copyright (c) 2015 ricardo.ch AG (http://www.ricardo.ch)
9
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
  */
11
 
19
  <ul class="messages">
20
  <?php if (count($messages)) { ?>
21
  <?php foreach ($messages as $message) { ?>
 
22
  <?php if (isset($message['name'])) { ?>
23
  <h2><?php echo $message['name'] ?></h2>
24
  <?php } ?>
app/locale/de_CH/Diglin_Ricento.csv CHANGED
@@ -2,57 +2,55 @@
2
  "Dashboard","Dashboard"
3
  "Products Listing","Produktübersicht"
4
  "Logs","Logs"
5
- "ricardo.ch Assistant","ricardo.ch Assistent"
6
  "Configuration","Konfiguration"
7
  "Ricento by Diglin GmbH","Ricento von der Diglin GmbH"
8
  "Log","Log"
9
- "ricardo.ch Payment Methods","ricardo.ch Zahlarten"
10
  "ricardo.ch Shipping","ricardo.ch Versandarten"
11
  "Admin Email Notification","Admin Email Benachrichtigung"
12
  "Private message","Private Nachricht"
13
- "Global Configuration","Globale Konfiguration"
14
  "Merge Order","Bestellungen zusammenfassen"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","Wenn ein Kunde mehrere Produkte innerhalb von 30 Minuten bestellt, möchten Sie, dass die Bestellungen zusammengefasst werden?"
16
  "Shipping Calculation","Versandkosten-Kalkulation"
17
- "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>","Sie können entscheiden, wie die Versandkosten berechnet werden, wenn eine Bestellung zusammengefasst wurde.<br>"
18
- " ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>","""Höchster Preis"": Diese Methode findet das Produkt mit den höchsten Versandkosten und nutzt diesen Versandkosten für die Gesamtsumme.<br>"
19
- " ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","""Kumulativ"": diese Methode addiert die Versandkosten der einzelnen Produkte"
20
  "Send Account Creation Confirmation Email","Sende Willkommensbestätigung per Mail"
21
- "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Möchten Sie eine Bestätigungsmail (via ricardo.ch API) senden, wenn ein Kunde ein Konto erstellt hat?"
22
  "Send Email for new order","Sende Email beim Eingang einer neuen Bestellung"
23
- "Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Möchten Sie eine Bestätigungsmail (via ricardo.ch API) senden, wenn ein Kunde ein Konto erstellt hat?"
24
  "API Token Configuration","API Token Konfiguration"
25
  "General API Config","Allgemeine API Konfiguration"
26
  "ricardo.ch Extension enabled","ricardo.ch Extension aktiviert"
27
  "Development Mode","Entwicklermodus"
28
  "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","Wenn Sie diese Funktion aktivieren, werden alle API-Anfragen an die ricardo.ch BETA Umgebubg verschickt. Stellen Sie sicher, dass Sie die dafür passenden API-Keys und Passwörter eingetragen haben."
29
  "Debug","Debug"
30
- "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","In diesem Modus werden alle Anfragen an die ricardo.ch-API in die Datei var/log/ricento.log geschrieben. Aktivieren Sie diesen Modus, wenn Sie Probleme haben und schicken Sie uns diese Datei zu. Damit können wir Ihnen helfen. Die Passwörter werden anonymisiert. Achtung: Das Log Datei Grösse kann schnell wachsen."
31
  "German API Token","Deutscher API Token"
32
- "PROD German Partner Key","PROD Deutscher Partner Schlüssel"
33
- "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Der Partner Schlüssel hat das folgende Format: '0F12345-1234-1234-1234-1234567890'. Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
34
- "PROD German Partner Password","PROD Deutsches Partner Passwort"
35
  "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
36
- "DEV German Partner Key","Entwicklermodus deutscher Partner Schlüssel"
37
- "DEV German Partner Password","Entwicklermodus deutsches Partner Passwort"
38
  "French API Token","Französischer API Token"
39
- "PROD French Partner Key","PROD Französischer Partner Schlüssel"
40
- "PROD French Partner Password","PROD Französischer Partner Passwort"
41
- "DEV French Partner Key","Entwicklermodus französischer Partner Schlüssel"
42
- "DEV French Partner Password","Entwicklermodus französischer Partner Passwort"
43
- "Cleanup Synchronization Jobs Log","Leere Log für Synchronisation-Jobs"
44
  "Enabled","Aktiviert"
45
- "Keep for X days","Halte für x Tage vor"
46
- "Cleanup Listings Log","Leere Log für Produktlisten"
47
  "ricardo.ch API Payment Methods","ricardo.ch API Zahlungsarten"
48
  "Bank Transfer Instructions","Instruktionen Bank-Überweisung"
49
  "Accepted Currency","Akzeptierte Währung"
50
- "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","Lagerbestand auf 1 gesetzt, da die Zahlart ""Direkt Kaufen"" nicht mehr als einen Artikel erlaubt."
51
  "Invalid start date.","Ungültiges Startdatum"
52
  "The end date must be in the future.","Das Enddatum muss in der Zukunft liegen."
53
- "Listed listings cannot be modified. Stop the listing first to make changes.","Aktive Listungen können nicht verändert werden. Beenden Sie die Listung, um Änderungen vornehmen zu können."
54
  "An error occurred while saving the configuration.","Ein Fehler trat beim Speichern der Konfiguration auf."
55
- "ricardo.ch Service Model doesn\'t exists.","ricardo.ch Service Model existiert nicht."
56
  "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","ricardo.ch API Daten sind nicht vorhanden. Bitte tragen Sie zunächst die Daten ein."
57
  "API language provided for the Service Manager is not supported.","API Sprache für den Service Manager wird nicht unterstützt."
58
  "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Fehler beim Verbinden mit der ricardo.ch API. Bitte checken Sie Ihre Log Dateien, um eine genauere Fehlerbeschreibung zu erhalten."
@@ -61,16 +59,16 @@
61
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
62
  "The product has been sold","Das Produkt wurde verkauft."
63
  "Customer creation failed! ricardo.ch transaction cannot be added.","Kunde konnte nicht angelegt werden. ricardo.ch Bestellung konnte nicht übertragen werden."
64
- "Order automatically generated by the ricardo.ch Extension.","Bestellung(en) wurde(n) automatisch durch das ricardo.ch Modul erstellt."
65
  "Payment is pending","Bezahlung ausstehend"
66
- "Payment has been completed on ricardo.ch side","Bezahlung wurde bei ricardo.ch durchgeführt."
67
  "Order canceled on ricardo.ch side","Bezahlung wurd bei ricardo.ch storniert."
68
  "Country Code is not available. Please contact the author of this extension or support.","Ländercode ist nicht verfügbar. Bitte kontaktieren Sie den Autor dieses Moduls für Support."
69
  "Report: %d success, %d warning(s), %d error(s)","Report: %d erfolgreich, %d Warnung(en), %d Fehler"
70
- "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">click here</a>. Products with an error won\'t be synchronized, you have to fix the problem first.","Erfolgreich geprüfte Produkte werden gelistet. Um Produkte mit Warnungen zu listen, klick Sie bitte <a href=""%s"">hier</a>. Produkte mit Fehlern werden nicht übertragen, Sie müssen die Fehler zuerst beheben."
71
- "The product is now live on ricardo.ch","Das Produkt ist nun live auf ricardo.ch."
72
  "Sorry, the product has not been sold","Sorry, das Produkt wurde nicht verkauft."
73
- "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","Der Artikel ist bereits gelistet oder hat bereits eine Artikelnummer bei ricardo.ch."
74
  "The product has been removed from ricardo.ch","Das Produkt wurde bei ricardo.ch entfernt."
75
  "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","Das Produkt wurde nicht bei ricardo.ch entfernt. Wahrscheinlich weil jemand für das Produkt geboten oder es gekauft hat."
76
  "Report: %d success, %d error(s)","Report: %d erfolgreich, %d Fehler"
@@ -104,12 +102,12 @@
104
  "Buy now","Sofort-Kaufen"
105
  "Highest Price","Höchster Preis"
106
  "Cumulative","Kumulativ"
107
- "Pending","Verarbeitung"
108
- "Running","Laufend"
109
- "Ready","Fertig"
110
- "Completed","Komplett"
111
  "Products Check Job","Produkt-Check Job"
112
- "List Job","List Job"
113
  "Stop List Job","Stop Einstellen Job"
114
  "Sync Order Job","Sync Bestellung Job"
115
  "Relist Job","Reaktivierung Job"
@@ -126,29 +124,28 @@
126
  "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Titel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
127
  "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Untertitel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
128
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Beschreibung wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
129
- "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Individuelle Optionen werden nicht unterstützt. Sie werden nicht zu ricardo.ch übertragen und ignoriert."
130
- "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","Das Hauptprodukt oder seine verknüpften Produkte sind nicht auf Lager oder der Lagerbestand ist nicht hoch genug."
131
- "Only %s currency is supported. No conversion will be done.","Nur die Währung %s wird unterstützt. Es wird keine Umrechnung vorgenommen."
132
- "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","Sie müssen eine ricardo.ch-Kategorie für dieses Produkt wählen. Prüfen Sie, ob Sie das Produkt auf Produktlisting-Level oder Magento-Kategorie-Level gesetzt haben."
133
- "Payment and/or Shipping combination are not correct.","Zahlung und/oder Versand-Kombination sind nicht korrekt."
134
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","Sie können keinen Startpreis für eine Auktion von %2$s festlegen, wenn Sie ""Sofort-Kaufen"" mit dem Produktpreis von %1$s anbieten."
135
- "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Aus Sicherheitsgründen ist eine Kreditkarten-Zahlung bei Beträgen von CHF %s.- nicht möglich für ""Sofort-Kaufen"". Bitte wählen Sie andere Zahlungsmethoden oder passen Sie den Preis an. Der Preis muss zwischen %s und %s liegen."
136
- "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","Das Enddatum ist zu früh oder zu spät. Minimale erlaubte Zeitspanne: %s Tage - maximale erlaubte Zeitspanne: %s Tage"
137
- "You cannot use the privilege spaces as you do not have any pictures for this product.","Sie können keine Sonderfelder nutzen, da Sie keine Bilder für dieses Produkt hinterlegt haben."
138
  "This increment value is not possible for this start price.","Der angegebene Erhöhungsschritt ist nicht möglich für diesen Startpreis."
139
  "Only the following combinations are possible:","Nur die folgenden Kombinationen sind möglich:"
140
- "Start price is between","Startpreis ist zwischen"
141
- "Increment must be between","Erhöhungsschritt muss sein zwischen "
142
- "This payment method combination is not possible.","Diese Zahlmethoden-Kombination ist nicht möglich."
143
  "The following combinations are possible:","Die folgenden Kombinationen sind möglich:"
144
- "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","Es ist nicht möglich, die Versandmethode ""Andere"" mit der Zahlmethoden ""Kreditkarte"" zu kombinieren."
145
- "No category will be displayed, the products listing doesn\'t exists. Please, close the window.","Keine Kategorie wird angezeigt, das Produktlisting existiert nicht. Bitte schliessen Sie das Fenster."
146
- "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. Bitte schliessen Sie das Fenster."
147
- "Product(s) from the selected categories cannot be saved. The products listing doesn\'t exists.","Produkte von den gewählten Kategorien können nicht gespeichert werden. Das Produktlisting existiert nicht."
148
- "You are not allowed to save the products listing, so you cannot add products from a category.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. "
149
- "%d product(s) added to the listing","%d Produkte zum Produktlisting hinzugefügt."
150
  "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Fehler traten auf während des Speicherns der gewählten Kategorien. Bitte prüfen Sie den Fehlerlog."
151
- "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Die Aktion, die Sie durchführen wollen, ist nicht möglich. Sie müssen zunächst das API Token authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozess durchzuführen."
152
  "Listing name and website must be specified.","Listingname und Webseite müssen definiert werden."
153
  "We have detected and set for you the language configuration. Please, review it before to go further.","Wir haben die Sprache für Sie vorausgewählt. Bitte prüfen Sie, ob die Wahl richtig ist, bevor Sie fortfahren."
154
  "The listing has been saved.","Das Listing wurde gespeichert."
@@ -156,32 +153,32 @@
156
  "Listed listings cannot be deleted. Stop the listing first.","Aktive Listings können nicht gelöscht werden. Stoppen Sie die Listings zuerst."
157
  "Listing deleted","Listing entfernt"
158
  "%d products removed from listing","%d Produkte vom Listing entfernt."
159
- "%d products are listed and could not be removed","%d Produkte sind aktiv gelistet und können nicht entfernt werden."
160
- "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","Der API Token und die Konfiguration sind nicht fertig eingerichtet, diese Aktion ist nicht erlaubt. Bitte prüfen Sie, dass der Token aktiv ist und die Gültigkeit nicht ausläuft."
161
- "A similar job is already running. This job won\'t be executed.","Es läuft bereits ein Vorgang. Ihre Aktion wird nicht ausgeführt."
162
- "It\'s s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Es ist nicht möglich, diese Aktion durchzuführen. Sie müssen den API Token zunächst authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozess durchzurführen."
163
- "An error occurred while starting this job. Please check your log file.","Ein Fehler trat auf beim Start des Vorgangs. Bitte schauen Sie in den Fehlerlog."
164
  "The job to check your products listing will start in few minutes. You can check the progression below.","Der Vorgang um Ihre Produktlistings zu überprüfen wird in wenigen Minuten starten. Sie können den Fortschritt unten einsehen."
165
- "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","Wenn erfolgreich beendet, werden Ihre Produkte automatisch aktiv gelistet. Falls Fehler auftreten, müssen Sie entscheiden, ob das Listing fortgesetzt oder überprüft werden soll."
166
  "There is no product ready to be listed. Please, add products to your products listing ""%s"".","Kein Produkt ist bereit um eingestellt zu werden. Bitte fügen Sie Produkt zu Ihrem Produktlisting ""%s"" hinzu."
167
  "There is no pending product to check.","Kein zu prüfendes Produkt vorhanden"
168
- "The job to list your products listing will start in few minutes.","Der Vorgang zur Einstellung Ihrer Produkte wird in wenigen Minuten beginnen."
169
  "You can check the progression below.","Sie können den Fortschritten unten einsehen."
170
- "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","Es gibt kein Produkt zum reaktivieren. Nur Produkte, die schon mal auf ricardo.ch.ch gelistet wurden, können wieder aktiviert werden für das Produktlisting %d."
171
- "Only listed product items can be stopped.","Nur aktive gelistete Produkte können deaktiviert werden."
172
  "The job to stop to list your products will start in few minutes.","Der Vorgang um Ihre Produkte zu beenden wird in wenigen Minuten beginnen."
173
  "Products listing(s) is/are successfully deleted.","Produktlisting(s) wurde(n) erfolgreich gelöscht."
174
- "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode(","Die folgenden Produktlisting-IDs wurden nicht gelöscht, da Sie immer noch aktiv auf ricardo.ch gelistet sind:"
175
- "An error occurred while trying to delete the products listing(s). Please, check your exception log.","Beim Löschen des/der Produktlisting(s) trat ein Fehler auf. Bitte schauen Sie in Ihre Fehlerlog."
176
  "No products selected.","Keine Produkte gewählt."
177
  "The configuration has been saved successfully.","Die Konfiguration wurde erfolgreich gespeichert."
178
- "An error occurred while saving the configuration. Please, check your log files for more details.","Beim Speichern der Konfiguration trat ein Fehler auf. Bitte schauen Sie in den Fehlerlog für weitere Informationen."
179
- "It\'s just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","Dies ist nur eine Vorschau. Bitte denken Sie daran, dass die Darstellung auf ricardo.ch unterschiedlich sein kann."
180
  "Log(s) is/are successfully deleted.","Log(s) wurde(n) erfolgreich gelöscht."
181
- "An error occurred while trying to delete the listing log(s). Please, check your exception log.","Beim Löschen der Listing-Logs trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
182
- "Job(s) is/are successfully deleted.","Aktion(en) erfolgreich gelöscht."
183
  "The following job IDs have not been deleted because they are still running: %s","Die folgenden Aktions-IDs wurden nicht gelöscht, da Sie immer noch aktiv sind."
184
- "An error occurred while trying to delete the job(s). Please, check your exception log.","Beim Löschen der Aktion(en) trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
185
  "ricardo.ch API Signup","ricardo.ch API Anmeldung"
186
  "API Signup","API Anmeldung"
187
  "ricardo.ch Assistant Portal","ricardo.ch Verkäuferportal"
@@ -189,16 +186,16 @@
189
  "Only Ajax call is allowed here.","Hier ist nur ein Ajax-Aufruf erlaubt."
190
  "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","Der Website Code von ricardo.ch ist nicht korrekt. Die Authorisierung konnte auf Seiten von Magento nicht gespeichert werden."
191
  "Your ricardo.ch account has been authorized to get access to the API.","Ihr ricardo.ch-Konto wurde erfolgreich authorisiert, um Zugang zur API zu erhalten."
192
- "An error occurred while saving the token. Please, check your log files.","Beim Speichern des Tokens trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
193
  "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","Die Authorisierung wurde von ricardo.ch zurückgewiesen. Bitte kontaktieren Sie ricardo.ch um den Grund zu erfahren."
194
  "Sign Up to ricardo.ch API","Anmeldung zur ricardo.ch API"
195
  "API Authorization","API Authorisierung"
196
  "No Selection","Keine Auswahl"
197
  "Open ricardo.ch Category Window","Öffne ricardo.ch Kategorien Fenster"
198
  "Add products from selected categories","Füge Produkte von gewählten Kategorien hinzu"
199
- "Only product types supported, enabled and not listed in other products listing will be added.","Nur Produkte, deren Typ unterstützt wird, die aktiv und nicht bereits gelistet sind, werden hinzugefügt."
200
- "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won\'t allow to add products of its subcategories.","Bitte achten Sie darauf, auch die Unterkategorien zu wählen. Wenn Sie nur eine Oberkategorie wählen können Produkte nicht zu deren Unterkategorien hinzugefügt werden."
201
- "Create new listing","Erstelle neues Listing."
202
  "Show Synchronization Jobs","Zeige Synchronisierung-Aufträge"
203
  "General","Allgemeine API Konfiguration"
204
  "Products","Produkte"
@@ -213,7 +210,7 @@
213
  "Status","Status"
214
  "Action","Aktion"
215
  "Preview","Vorschau"
216
- "Configure","Konfiguriere"
217
  "Remove","Löschen"
218
  "Are you sure to remove this/these product(s)?","Sind Sie sicher, dass Sie diese Produkte löschen möchten?"
219
  "Remove from list","Von der Liste löschen"
@@ -222,53 +219,51 @@
222
  "This product has been configured for %s %s","Diese Produkte wurde konfiguriert für %s %s"
223
  "The product has custom options, those will not be added to ricardo.ch!","Das Produkt hat individuelle Optionen, diese werden nicht zu ricardo.ch übertragen."
224
  "ID","ID"
225
- "Add selected product(s)","Fügen Sie gewählte Produkte hinzu"
226
  "Title","Titel"
227
- "Website","Website"
228
  "Language","Sprache"
229
  "Product languages to synchronize to ricardo.ch","Produktsprachen, die mit ricardo.ch synchronisiert werden sollen."
230
- "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch unterstützt zur Zeit nur zwei Sprachen: Deutsch und Französisch. Sie können wählen, in welcher Sprache Sie die Produktinfos übertragen möchten (Titel, Untertitel, Beschreibung, etc)."
231
  "Default language to publish","Standardsprache bei der Veröffentlichung."
232
- "Which language to publish by default to ricardo.ch when the product content is not available in a language?","Welche Sprache soll standarmässig zur Veröffentlichung bei ricardo.ch gewählt werden, wenn Produktinfos in gewüschter Sprache nicht verfügbar sind?"
233
- "Store View for %s","Store View für %s"
234
  "Payment Methods","Zahlungsarten"
235
- "Payment Description German","Zahlungsarten Beschreibung deutsch"
236
- "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Zeichen: %s. Max. 5 000 Zeichen. Information zu den Zahlungsarten für die Kunden. Diese Infos werden zu ricardo.ch nur übertragen, wenn Sie die Zahlart ""Andere"" wählen"
237
  "Payment Description French","Beschreibung Zahlungsarten Französisch"
238
  "Shipping Methods","Versandarten"
239
  "Shipping Price","Versandkosten"
240
  "Free shipping","kostenloser Versand"
241
- "Is Shipping fee cumulative","Sind Versandkosten kumulativ"
242
- "If you select this option, the shipping fee will be calculate for each sold product.","Wenn Sie diese Option wählen, werden die Versandkosten für jedes verkaufte Produkt einzelnd berechnet."
243
- "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","z. B. ein Artikel wird mit der Menge 3 von einem Kunden gekauft und die Versandkosten liegen bei jeweils 15 CHF. Die Versandkosten sind dann insgesamt 45 CHF. Lassen Sie das Feld leer, wenn Sie diese Option nicht wählen möchten."
244
  "Shipping Availability","Verfügbarkeit des Artikels"
245
- "Shipping Description German","Versandbeschreibung deutsch"
246
  "Characters: %s. Max. 5 000 characters","Zeichen: %s. Max. 5 000 Zeichen"
247
- "Shipping Description French","Versandbeschreibung französisch"
248
- "The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed.","Die Standardwährung dieses Stores ist {$storeCurrency}. Nur %s ist als Währung erlaubt. Die Preise werde nicht umgerechnet."
249
  "Category","Kategorie"
250
  "ricardo.ch Category","ricardo.ch Kategorie"
251
- "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Nutze Magento / ricardo.ch Kategorie-Mapping (wenn ein Mapping nicht existiert, wird eine Fehlermeldung ausgegeben, wenn die Synchronisierung zu ricardo.ch vorbereitet wird.)"
252
  "Select ricardo.ch Category","Wähle ricardo.ch Kategorie"
253
  "Select the category","Wähle Kategorie"
254
- "Type of sales","Verkaufstyp"
255
- "Until sold","Bis ausverkauft"
256
  "Start price","Startpreis"
257
- "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Spanne zwischen Fr. 0.05 und Fr. 1 000 000. Wenn Kreditkarte als Zahlart verfügbar und aktiv, liegt die Spanne zwischen Fr. 0.05 und Fr. 2 999.95."
258
  "Increment","Erhöhtungsschritt"
259
  "Currency","Währung"
260
  "Allow Direct Buy","Erlaube Sofort-Kaufen"
261
  "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Befüllen Sie das Feld ""Sofort-Kaufen"" unten, um den Sofort-Kaufen-Preis zu definieren. <strong>Hinweis</strong>: wenn auf ""Ja"" gestellt, wird die ""individuelle Verfügbarkeit"" auf 1 gestellt."
262
  "Source","Quelle"
263
  "Price Change","Preisspanne"
264
- "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","Für Produkte mit Fixpreis, der Mindestpreis ist Fr. 0.05 und der Maximalpreis ist Fr. 2 999.95 sofern die Zahlungsart Kreditkarte aktiviert ist."
265
- "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","Für Auktions-Artikel ist die minimale Menge Fr. 0.1 und muss grösser sein, als der Startpreis."
266
- "If not correctly defined, the minimum and maximum values will be automatically set.","Wenn nicht korrekt definiert, werden die Min- und Max-Werte automatische gesetzt."
267
  "Schedule","Zeitplan"
268
  "Start","Start"
269
  "Starting date must start minimum in one hour and maximum 30 days in the future.","Der Verkauf kann frühestens in einer Stunde, spätestens in 30 Tagen starten."
270
  "Start immediately","Sofort starten"
271
- "Start from","Starte von"
272
  "End","Ende"
273
  "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","Der Verkauf darf frühestens in 24 Stunden, spätestens 10 Tage nach dem Startdatum enden."
274
  "End after %s days","Ende nach %s Tagen"
@@ -283,42 +278,44 @@
283
  "Condition Product Source","Zustand des Produkts"
284
  "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Möchten Sie den Zustand des Produkts über das Produktattribut bestimmen? Falls nicht und Sie hier ""Nein"" eintragen, wird der Standardwert aus dem Produktlisting übernommen."
285
  "Warranty","Garantie"
286
- "Warranty description German","Garantiebeschreibung deutsch"
287
  "Characters %s. Max. 5 000 characters","Zeichen %s. Max. 5 000 Zeichen"
288
- "Warranty description French","Garantiebeschreibung französisch"
289
  "Stock Management","Lagerverwaltung"
290
- "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Spanne 1...999. Wenn Sie die Lagerhaltungs-Option nutzen, wird die Menge der Produkte mit dem Feld ""Menge"" befüllt. Die maximale Menge ist jedoch 999."
291
  "Use product inventory","Nutze Lagerbestand des Produkts"
292
  "Use custom qty","Nutze spezifizierte Menge"
293
- "Customization","Spezifizierung"
294
- "Template","Template"
295
- "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","Um eines zu erstellen, gehen Sie zu Ihrem <a href=""%s"">ricardo.ch Konto</a> in ""Meine Verkäufe""."
296
  "Promotion","Promotion"
297
  "Privilege Space","Promo-Fenster"
298
- "Privilege space on main category page and search results. More information about this feature <a onclick=\window.open('%s');\"">here</a>""","Promo-Fenster auf der Hauptkategorieseite und Suchergebnisse. Mehr Informationen über dieses Feature finden Sie <a onclick=\window.open('%s');\"">hier</a>"""
 
299
  "Home Privilege Space","Promo-Fenster Homepage"
300
  "Privilege space on the homepage. More information about this feature <a onclick=""window.open('%s');"">here</a>","Promo-Fenster auf der Homepage. Mehr Informationen über dieses Feature bekommen Sie <a onclick=""window.open('%s');"">hier</a>"
301
  "Home Space","Promo-Fenster Homepage"
302
  "These options will not be activated for products having no picture.","Diese Option wird nicht aktiviert für Produkte ohne Bilder."
303
- "Listed items cannot be modified. Stop the listing first to make changes.","Gelistete Produkte können nicht modifiziert werden. Beenden Sie zunächst das Listing um Änderungen vornehmen zu können."
 
304
  "Back to the list ""%s""","Zurück zur Liste ""%s"""
305
  "Configure product '%s'","Konfiguriere Produkt '%s'"
306
  "Configure all %s selected products","Konfiguriere alle %s gewählten Produkte"
307
  "No ricardo.ch category found","Keine ricardo.ch Kategorie gefunden"
308
  "Give a name","Geben Sie einen Namen an"
309
  "Select a website","Wählen Sie eine Website"
310
- "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","Die Website(s) müssen für diese extension konfiguriert und aktiviert sein. Wenn dieses Feld leer ist oder etwas fehlt, <a href=""%s"">konfigurieren</a> Sie bitte die Extension."
311
  "Cancel","Abbrechen"
312
- "Listed products:","Gelistete Produkte"
313
- "Not listed products:","Nicht gelistete Produkte"
314
  "Add Product(s) from category","Füge Produkt(e) von der Kategorie hinzu"
315
  "Add Product(s)","Füge Produkt(e) hinzu"
316
- "Stop","Stop"
317
- "Remove article listed on ricardo.ch","Entferne gelistete Artikel auf ricardo.ch"
318
- "Check & List","Prüfe & liste"
319
- "Check & list only pending & error items","Prüfe & liste nur wartende und fehlerhafte Produkte"
320
  "List","Einstellen"
321
- "List only ""Ready to list"" items","Nur Produkte einstellen, die den Status ""Fertig zur Listung"" haben"
322
  "Edit Products Listing '%s'","Bearbeite Produktlisting '%s'"
323
  "New Products Listing","Neues Produktlisting"
324
  "Websites","Websites"
@@ -329,7 +326,7 @@
329
  "View Logs","Siehe Logs"
330
  "Change status","Ändere Status"
331
  "Delete","Löschen"
332
- "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed""","Sind Sie sicher, dass Sie die Produktlisting(s) löschen möchten? Beachten Sie, das nur aktive Listen gelöscht werden können."
333
  "Products Listing Log ""%s""","Produktlistings Log ""%s"""
334
  "Edit ""%s""","Bearbeite ""%s"""
335
  "Job ID","Job ID"
@@ -342,7 +339,7 @@
342
  "Job Type","Job Typ"
343
  "Job Message","Job Nachricht"
344
  "Current Progress","Aktueller Fortschritt"
345
- "Started at","Begonnen am"
346
  "Ended at","Beendet am"
347
  "Are you sure that you want to delete this/these job(s)?","Sind Sie sicher, dass Sie diese Vorgänge löschen möchten?"
348
  "Show Products Listing","Zeige Produktlisting"
@@ -353,18 +350,18 @@
353
  "You may also access to the %s content of this page</a> in a new window.","Sie können den %s Inhalt dieser Seite auch </a> in einem neuen Fenster bearbeiten."
354
  "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Ihre ricardo.ch-API-Token-Daten laufen in %s Tagen für diese Webseite ""%s"" ab."
355
  "No ricardo.ch API Authorization have been found for the website ""%s"".","Keine ricardo.ch-API-Authorisierung wurde für diese Website ""%s"" gefunden."
356
- " You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," Sie müssen Ihr Konto authorisieren, um Zugang zur ricardo.ch-API zu bekommen. Sie können das mittels der <a href=""%s"">ricardo.ch Authorisierungsseite</a> tun. Wenn Sie das nicht tun, werden alle Aufrufe von und zu ricardo.ch blockiert."
357
  "To hide this message, you have to <a href=""%s"">disable the extension</a>.","Um diese Nachricht zu verbergen, müssen Sie die Extension <a href=""%s"">deaktivieren</a>."
358
  "The Official ricardo.ch Extension has been installed.","Die offizielle ricardo.ch Extension wurde installiert."
359
  "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Bitte klicken Sie <a href=""%s"">hier</a> um den Zugang zur ricardo.ch API zu konfigurieren."
360
  "Latest message for the selected job","Letzte Nachricht für den gewählten Vorgang"
361
- "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Bearbeite</a> deine Produktlistings, wenn notwendig"
362
  "No message found.","Keine Nachricht gefunden."
363
- "Confirm","Bestätige"
364
  "More Views","Mehr Ansichten"
365
  "%s days 0:0:0","%s Tage 0:0:0"
366
  "Starting price","Startpreis"
367
- "Place a bit","Platziere ein Gebot"
368
  "Quantity","Anzahl"
369
  "of %s","von %s"
370
  "Details","Details"
@@ -382,29 +379,25 @@
382
  "Shipping Price:","Versandkosten:"
383
  "Shipping Availability:","Versandverfügbarkeit:"
384
  "Shipping Description (CH):","Versandkosten Beschreibung (CH):"
385
- "You must select a ricardo.ch Category if you set this option","Sie müssen eine ricardo.ch-Kategorie wählen, um diese Option zu wählen"
386
  "The task will start few minutes","Der Vorgang wird in ein paar Minuten starten"
387
  "No progress","Kein Fortschritt"
388
  "The product list has been stopped.","Die Produktliste wurde beendet."
389
-
390
  "ricardo.ch Lifetime Sales","ricardo.ch Gesamtumsatz"
391
  "Turnover per month","Umsatz pro Monat"
392
  "Best Sellers","Meistverkaufte Produkte"
393
- "Qty sold", "Menge Verkauft"
394
- "Product Name","Produktname"
395
  "SKU","SKU"
396
  "Price","Preis"
397
  "Your ricardo.ch API Token","Ihre ricardo.ch API Token"
398
-
399
- "PREMIUMCATEGORYBRONZE"," Klein"
400
- "PREMIUMCATEGORYSILVER"," "Medium"
401
- "PREMIUMCATEGORYGOLD"," "Gross"
402
-
403
  "TYPE_BANK_TRANSFER","Banküberweisung"
404
- "TYPE_CASH","Bar"
405
  "TYPE_CREDIT_CARD","Kreditkarte via ricardo.ch"
406
- "TYPE_OTHER", "Andere Zahlungsmethoden"
407
-
408
  "UNKNOWNPROPERTY","Unbekannter Besitzer"
409
  "CUSTOMERNOTARTICLEOWNER","Der Kunde darf das Produkt nicht bearbeiten, da er nicht der Besitzer ist."
410
  "CHECKPASSWORDWRONGPASSWORD","Das Passwort ist falsch."
@@ -416,9 +409,9 @@
416
  "TOKENEXPIRED","Token ausgelaufen für API "
417
  "ANONYMOUSNOTALLOWED","Anonymer Aufruf ist nicht erlaubt"
418
  "TEMPORAYCREDENTIALEXPIRED","temporärer Zugang abgelaufen für API"
419
- "TEMPORAYCREDENTIALUNVALIDATED","temporärer Zugang für API nicht valide"
420
  "SESSIONEXPIRED","Session abgelaufen"
421
- "UPDATEPASSWORDPOLICYINVALID","CustomerUpdatePassword wird mit einem Passwort mit invaliden Bedingungen genutzt. Es müssen mindestens 8 Zeichen sein, davon mindestens ein Grossbuchstabe und ein Nicht-Alphanumerisches Zeichen."
422
  "AFTOKENERROR","Anti Forgery token error "
423
  "UNKNOWNPARTNERSHIP","Unbekannte Partnerschaft"
424
  "CHECKPASSWORDPENDINGEMAILVALIDATION","Nutzer hat seine E-Mail Adresse nicht validiert"
@@ -427,7 +420,6 @@
427
  "ACCOUNTCLOSED","Das Kundenkonto wurde geschlossen."
428
  "METHODNOTALLOWED","Die Partnerschaft stimmt nicht mit der gewählten Methode überein."
429
  "TOKEN_AUTHORIZATION","Die Authorisierung muss nochmal durchgeführt werden"
430
-
431
  "CLOSEAUCTIONFAILED","Auktion konnte nicht geschlossen werden"
432
  "CLOSECLASSIFIEDFAILED","Ein Produkt konnte nicht klassifiziert werden"
433
  "DELETEPLANNEDFAILED","Ein Produkt konnte nicht gelöscht werden"
@@ -438,19 +430,18 @@
438
  "CUSTOMERNOTFOUND","Kunde nicht gefunden"
439
  "EMPTYIPADDRESS","Die IP Adresse ist nicht definiert"
440
  "TECHNICALPROBLEM","Technischer Fehler"
441
- "ARTICLESAMOUNTLIMIT","Limit für die Menge pro Übertragung liegt bei 100 "
442
  "LISTOFARTICLESEMPTY","Liste der Produkte ist leer"
443
  "UNKNOWNCATEGORYNAME","Kategoriename ist nicht bekannt"
444
-
445
- "EMPTYCOUNTRYID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
446
- "EMPTYPARTNERID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
447
- "EMPTYCATEGORY","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
448
- "EMPTYRELISINFOS","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
449
  "EMPTYCUSTOMER","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
450
- "UNKNOWNPARTNERID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
451
- "UNKONWNCATEGORYID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
452
  "INVALIDDURATION","Die angefragte Dauer ist nicht möglich."
453
- "RELISTCOUNTEXCEEDED","Bitte beachten Sie, dass Sie Ihre Artikel höchstens 9 Mal reaktivieren können. "
454
  "STARTPRICETOOHIGH","Bitte setzen Sie einen Startpreis, der gleich oder tiefer als CHF 10 000 000 000 ist."
455
  "STARTPRICETOOLOW","Bitte setzen Sie einen Startpreis, der gleich oder höher als CHF 0.05 ist."
456
  "INVALIDARTICLETYPEFORCATEGORY","Bitte beachten Sie, dass diese Kategorie-Änderung nicht erlaubt ist."
@@ -458,7 +449,7 @@
458
  "CATEGORYDEDICATEDTOUSERS","Leider können Sie in dieser Kategorie keine Artikel einstellen. Bitte wählen Sie eine andere Kategorie aus oder kontaktieren Sie unseren Kundendienst."
459
  "INVALIDTEMPLATEID","Bitte überprüfen Sie ob die ausgewählte Vorlage in Ihrem My Ricardo vorhanden ist."
460
  "EMPTYTITLE","Bitte tragen Sie einen Titel in das entsprechende Feld ein."
461
- "EMPTYDESCRIPTION","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
462
  "EMPTYSUBTITLE","Bitte tragen Sie einen Untertitel in der zweiten Sprache ein."
463
  "TOOLONGTITLE","Bitte beachten Sie, dass der Titel nicht mehr als 40 Zeichen enthalten darf."
464
  "TOOLONGDESCRIPTION","Bitte beachten Sie, dass Ihre Artikel-Beschreibung nicht mehr als 65'000 Zeichen enthalten darf."
@@ -477,21 +468,21 @@
477
  "NODELIVERYCONDITION","Bitte wählen Sie eine Versandart aus. "
478
  "DELIVERYCOSTTOOHIGH","Die von Ihnen definierte Versandkosten sind zu hoch. Bitte wählen Sie einen Betrag der kleiner ist als CHF 210'000."
479
  "MANUALINCREMENTNOTALLOWED","Der Erhöhungschritt kann nicht manuell definiert werden."
480
- "PLANNEDSCHEDULETOOLOW","Die geplante Startzeit, darf nicht näher als 30 Minuten von der aktuellen Zeit sein"
481
  "PLANNEDSCHEDULETOOHIGH","Die von Ihnen definierte ""Startzeit"" für das Einstellen des Artikels liegt zuweit in der Zukunft. Bitte planen Sie max. 30 Tage im Voraus. "
482
- "REFERENCETOOLONG","Die von Ihnen gesetzte Referenznummer ist zu lang. Bitte wählen Sie eine Referenznummer mit maximal 40 Zeichen."
483
- "INVALIDQUANTITYFORAUCTIONBUYNOW","Bitte beachten Sie, dass die Option "Sofort-Kaufen" nur bei Angeboten mit der Stückzahl 1 gewählt werden kann."
484
  "BUYNOWLOWERTHANSTARTPRICE","Bitte setzen Sie einen Sofort-Kaufen-Preis, der höher als Ihr Startpreis ist."
485
  "RICARDOPAYNOCARSANDBIKES","Über ricardo.ch können keine Autos oder Fahrräder verkauft werden"
486
- "RICARDOPAYWRONGPAYMENTCONDITIONS","Die gewählte Bezahlmethode kann nicht mit der Kreditkartenzahlung kombiniert werden. Bitte wählen Sie eine andere Methode aus."
487
  "RICARDOPAYPRICETOOHIGH","Der Preis ist zu hoch."
488
  "RICARDOPAYWALLETBLOCKED","Das ricardo.ch Pay-Wallet wurde blockiert."
489
  "MAXPICTURESIZEREACHED","Bitte beachten Sie, dass die gesamte Grösse für das Hochladen Ihrer Bilder auf 20 MB beschränkt ist. "
490
  "ERRORRESIZINGPICTURE","Während der Verarbeitung Ihrer Bilder ist ein Fehler aufgetreten. Wir bitten Sie um Entschuldigung."
491
- "MAXPICTURESCOUNTREACHED","Bitte beachten Sie, dass die maximale Anzahl Fotos pro Artikel auf 10 beschränkt ist. Weitere Bilder können deshalb nicht hinzugefügt werden."
492
  "INVALIDPROMOTION","Ungültige Promotion."
493
  "INVALIDPROMOTIONCOMBINATION","Bitte beachten Sie, dass die mehrfache Auswahl von Anzeigepaketen nicht möglich ist. "
494
- "NOTCLOSED","Die Bezahloption „Kreditkartenzahlung“ steht für Autozubehör nicht zur Verfügung. Deaktivieren Sie bitte diese Option."
495
  "EMPTYARTICLEINFOS","Bitte wählen Sie eine Option, um den Zustand Ihres Artikels zu definieren."
496
  "EMPTYDELIVERY","Bitte wählen Sie eine Versandart aus."
497
  "EMPTYPROMOTIONS","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
@@ -563,31 +554,29 @@
563
  "CANTUPDATEPICTUREONARTICLEWITHBID","Das Bild kann bei einem Angebot das bereits Gebote erhalten hat nicht aktualisiert werden."
564
  "HTMLTAGSNOTALLOWED","Bitte beachten Sie, dass HTML-Tags in diesem Beschreibungsfeld nicht unterstützt werden"
565
  "WRONGPAYMENTCONDITIONS","Falsche Zahlungsarten"
566
- "EMPTYPAYMENTCONDITIONIDS","Leere Zahlungsarten-Ids"
567
- "NODETAILS","Keine Details gegeben."
568
- "ARTICLEALREADYHASCARDPAYMENT","Produkt hat bereits eine Zahlungs-Id."
569
  "ERRORINSERTINGCARDPAYMENT","Fehler bei der Eingabe der Kartenzahlung."
570
  "ARTICLEDOESNOTHAVECARDPAYMENT","Produkt hat keine Kartenzahlung."
571
  "ERRORREMOVINGCARDPAYMENT","Fehler beim Entfernen der Kartenzahlung"
572
- "RICARDOPAYNOTACTIVATED","ricardo.ch Pay ist nicht aktiviert."
573
- "EMPTYPAYMENTMETHODSIDS","Leere Zahlungsarten-Ids"
574
- "EMPTYARTICLEID","Leere Produkt-Id"
575
  "INVALIDCARDCOMBINATIONWITHDELIVERYCONDITION","Ungültige Karte in Kombination mit den Versandkonditionen"
576
  "NUMBEROFARTICLELIMITED","Anzahl der Produkte ist limitiert."
577
  "PAYMENTMETHODNEEDALTERNATEONE","Alternative Zahlungsart notwendig."
578
- "WRONGPAYMENTMETHODS","falsche Zahlungsart"
579
- "CUMULATIVESHIPPINGNOTALLOWED","kumulative Versandkosten nicht erlaubt."
580
-
581
  "MAXPICTURESCOUNTREACHED","maximale Bilderanzahl erreicht"
582
- "MAXPICTURESIZEREACHED","maximale Bildgrösse erreicht"
583
  "ERRORRESIZINGPICTURE","Fehler bei der Grössenänderung der Bilder"
584
  "PICTUREINDEXDOESNOTEXIST","Bildindex existiert nicht"
585
  "EMPTYPICTURECONTENT","leerer Bildinhalt"
586
  "NOPICTURES","keine Bilder"
587
  "INVALIDPICTUREINDEX","ungültiger Bildindex"
588
- "MAXLOGOPICTURESIZEREACHED","maximale Logogrösse erreicht"
589
- "ERRORRESIZINGLOGOPICTURE","Fehler bei der Grössenänderung des Logos"
590
-
591
  "NOTALLOWEDTOSELL","Produkt nicht erlaubt zu verkaufen"
592
  "BILLINGERROR","BILLINGERROR"
593
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
@@ -652,13 +641,38 @@
652
  "UNABLETOINSERT","UNABLETOINSERT"
653
  "CREDITLIMITEXCEEDED","Kreditlimit erreicht. Bitte, kontaktieren Sie ricardo.ch"
654
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
655
-
656
  "No Options because API is not configured","No Options because API is not configured"
657
  "No Options because API has a problem","No Options because API has a problem"
658
- "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.", "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
659
- "Security error occurred with the ricardo API. Please, check your log files.", "Security error occurred with the ricardo API. Please, check your log files."
660
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
661
- "Product Price of %s CHF is incorrect. Minimum price is %s.","Produktpreis von %s CHF ist falsch. Minimum Preis ist %s."
662
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
663
  "Following error(s) appeared:","Following error(s) appeared:"
664
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "Dashboard","Dashboard"
3
  "Products Listing","Produktübersicht"
4
  "Logs","Logs"
5
+ "ricardoAssistant","ricardoAssistent"
6
  "Configuration","Konfiguration"
7
  "Ricento by Diglin GmbH","Ricento von der Diglin GmbH"
8
  "Log","Log"
9
+ "ricardo.ch Payment Methods","ricardo.ch Zahlungsarten"
10
  "ricardo.ch Shipping","ricardo.ch Versandarten"
11
  "Admin Email Notification","Admin Email Benachrichtigung"
12
  "Private message","Private Nachricht"
13
+ "Order Configuration","Bestellungs Konfiguration"
14
  "Merge Order","Bestellungen zusammenfassen"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","Wenn ein Kunde mehrere Produkte innerhalb von 30 Minuten bestellt, möchten Sie, dass die Bestellungen zusammengefasst werden?"
16
  "Shipping Calculation","Versandkosten-Kalkulation"
17
+ "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","Sie können entscheiden, wie die Versandkosten berechnet werden, wenn eine Bestellung zusammengefasst wurde.<br> ""Höchster Preis"": Diese Methode findet das Produkt mit den höchsten Versandkosten und nutzt diesen Versandkosten für die Gesamtsumme.<br>""Kumulativ"": diese Methode addiert die Versandkosten der einzelnen Produkte."
 
 
18
  "Send Account Creation Confirmation Email","Sende Willkommensbestätigung per Mail"
19
+ "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Möchten Sie ein Bestätigungsmail von Magento senden, wenn ein Kunde ein Konto erstellt hat?"
20
  "Send Email for new order","Sende Email beim Eingang einer neuen Bestellung"
21
+ "Do you want to send the newly order created by email to a customer when the order is imported from ricardo?","Möchten Sie eine Bestellungbestätigungsmail versenden, wenn eine neue Bestellung importiert ist?"
22
  "API Token Configuration","API Token Konfiguration"
23
  "General API Config","Allgemeine API Konfiguration"
24
  "ricardo.ch Extension enabled","ricardo.ch Extension aktiviert"
25
  "Development Mode","Entwicklermodus"
26
  "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","Wenn Sie diese Funktion aktivieren, werden alle API-Anfragen an die ricardo.ch BETA Umgebubg verschickt. Stellen Sie sicher, dass Sie die dafür passenden API-Keys und Passwörter eingetragen haben."
27
  "Debug","Debug"
28
+ "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","In diesem Modus werden alle Anfragen an die ricardo.ch-API in die Datei var/log/ricento.log geschrieben. Aktivieren Sie diesen Modus, wenn Sie Probleme haben und schicken Sie uns diese Datei zu. Damit können wir Ihnen helfen. Die Passwörter werden anonymisiert. Achtung: Die Log Datei kann sehr schnell wachsen."
29
  "German API Token","Deutscher API Token"
30
+ "PROD German Partner Key","PROD Deutscher Partnership Key"
31
+ "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Der Partnership Key hat das folgende Format: '0F12345-1234-1234-1234-1234567890'. Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
32
+ "PROD German Partner Password","PROD Deutsches Partnership Passwort"
33
  "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
34
+ "DEV German Partner Key","Entwicklermodus deutscher Partnership Key"
35
+ "DEV German Partner Password","Entwicklermodus deutsches Partnership Passwort"
36
  "French API Token","Französischer API Token"
37
+ "PROD French Partner Key","PROD Französischer Partnership Key"
38
+ "PROD French Partner Password","PROD Französischer Partnership Passwort"
39
+ "DEV French Partner Key","Entwicklermodus französischer Partnership Key"
40
+ "DEV French Partner Password","Entwicklermodus französischer Partnership Passwort"
41
+ "Cleanup Synchronization Jobs Log","Log für Synchronisation-Jobs löschen"
42
  "Enabled","Aktiviert"
43
+ "Keep for X days","Aufbewahren für x Tage"
44
+ "Cleanup Listings Log","Log für Produktlisten leeren"
45
  "ricardo.ch API Payment Methods","ricardo.ch API Zahlungsarten"
46
  "Bank Transfer Instructions","Instruktionen Bank-Überweisung"
47
  "Accepted Currency","Akzeptierte Währung"
48
+ "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","Lagerbestand auf 1 gesetzt, da die Sofort-Kaufen Option nicht mehr als ein Stück erlaubt."
49
  "Invalid start date.","Ungültiges Startdatum"
50
  "The end date must be in the future.","Das Enddatum muss in der Zukunft liegen."
51
+ "Listed listings cannot be modified. Stop the listing first to make changes.","Aktive Produklisten können nicht verändert werden. Beenden Sie die Produklisten, um Änderungen vornehmen zu können."
52
  "An error occurred while saving the configuration.","Ein Fehler trat beim Speichern der Konfiguration auf."
53
+ "ricardo.ch Service Model doesn't exists.","ricardo.ch Service Model existiert nicht."
54
  "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","ricardo.ch API Daten sind nicht vorhanden. Bitte tragen Sie zunächst die Daten ein."
55
  "API language provided for the Service Manager is not supported.","API Sprache für den Service Manager wird nicht unterstützt."
56
  "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Fehler beim Verbinden mit der ricardo.ch API. Bitte checken Sie Ihre Log Dateien, um eine genauere Fehlerbeschreibung zu erhalten."
59
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
60
  "The product has been sold","Das Produkt wurde verkauft."
61
  "Customer creation failed! ricardo.ch transaction cannot be added.","Kunde konnte nicht angelegt werden. ricardo.ch Bestellung konnte nicht übertragen werden."
62
+ "Order automatically generated by the ricardo.ch Extension.","Bestellung(en) wurde(n) automatisch durch die ricardo.ch Extension erstellt."
63
  "Payment is pending","Bezahlung ausstehend"
64
+ "Payment has been completed on ricardo.ch side","Bezahlung wurde bei ricardo.ch ausgeführt."
65
  "Order canceled on ricardo.ch side","Bezahlung wurd bei ricardo.ch storniert."
66
  "Country Code is not available. Please contact the author of this extension or support.","Ländercode ist nicht verfügbar. Bitte kontaktieren Sie den Autor dieses Moduls für Support."
67
  "Report: %d success, %d warning(s), %d error(s)","Report: %d erfolgreich, %d Warnung(en), %d Fehler"
68
+ "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">click here</a>. Products with an error won't be synchronized, you have to fix the problem first.","Erfolgreich geprüfte Produkte werden eingestellt. Um Produkte mit Warnungen einzustellen, klick Sie bitte <a href=""%s"">hier</a>. Produkte mit Fehlern werden nicht eingestellt, Sie müssen die Fehler zuerst beheben."
69
+ "The product is now live on ricardo.ch","Das Produkt ist nun auf ricardo.ch eingestellt."
70
  "Sorry, the product has not been sold","Sorry, das Produkt wurde nicht verkauft."
71
+ "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","Der Artikel ist bereits eingestellt oder hat bereits eine Artikelnummer bei ricardo.ch."
72
  "The product has been removed from ricardo.ch","Das Produkt wurde bei ricardo.ch entfernt."
73
  "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","Das Produkt wurde nicht bei ricardo.ch entfernt. Wahrscheinlich weil jemand für das Produkt geboten oder es gekauft hat."
74
  "Report: %d success, %d error(s)","Report: %d erfolgreich, %d Fehler"
102
  "Buy now","Sofort-Kaufen"
103
  "Highest Price","Höchster Preis"
104
  "Cumulative","Kumulativ"
105
+ "Pending","Ausstehend"
106
+ "Running","In Verarbeitung"
107
+ "Ready","Bereit"
108
+ "Completed","Abgeschlossen"
109
  "Products Check Job","Produkt-Check Job"
110
+ "List Job","Einstellen-Job"
111
  "Stop List Job","Stop Einstellen Job"
112
  "Sync Order Job","Sync Bestellung Job"
113
  "Relist Job","Reaktivierung Job"
124
  "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Titel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
125
  "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Untertitel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
126
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Beschreibung wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
127
+ "Custom Options are not supported. Those won't be synchronized into ricardo.ch.","Individuelle Optionen werden nicht unterstützt. Sie werden nicht zu ricardo.ch übertragen und ignoriert."
128
+ "The product or its associated products is/are not in stock or doesn't have enough quantity in stock.","Das Hauptprodukt oder seine verknüpften Produkte sind nicht an Lager oder der Lagerbestand ist nicht hoch genug."
129
+ "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","Sie müssen eine ricardo.ch-Kategorie für dieses Produkt wählen. Prüfen Sie, ob Sie das Produkt auf Produktliste-Ebene oder Magento-Kategorie-Ebene gesetzt haben."
130
+ "Payment and/or Shipping combination are not correct.","Zahlungsarten- und/oder Versand-Kombination sind nicht korrekt."
 
131
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","Sie können keinen Startpreis für eine Auktion von %2$s festlegen, wenn Sie ""Sofort-Kaufen"" mit dem Produktpreis von %1$s anbieten."
132
+ "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Aus Sicherheitsgründen ist eine Kreditkarten-Zahlung bei Beträgen von CHF %s.- nicht möglich für ""Sofort-Kaufen"". Bitte wählen Sie eine andere Zahlungsart oder passen Sie den Preis an. Der Preis muss zwischen %s und %s liegen."
133
+ "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","Das Enddatum ist zu früh oder zu spät. Erlaubte Zeitspanne: mindestens %s Tage maximal %s Tage"
134
+ "You cannot use the privilege spaces as you do not have any pictures for this product.","Sie können keine Promotionen nutzen, da Sie keine Bilder für dieses Produkt hinterlegt haben."
135
  "This increment value is not possible for this start price.","Der angegebene Erhöhungsschritt ist nicht möglich für diesen Startpreis."
136
  "Only the following combinations are possible:","Nur die folgenden Kombinationen sind möglich:"
137
+ "Start price is between","Startpreis"
138
+ "Increment must be between","Erhöhungsschritt"
139
+ "This payment method combination is not possible.","Diese Zahlungsarten-Kombination ist nicht möglich."
140
  "The following combinations are possible:","Die folgenden Kombinationen sind möglich:"
141
+ "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","Es ist nicht möglich, die Versandmethode ""Andere"" mit der Zahlungsart ""Kreditkarte"" zu kombinieren."
142
+ "No category will be displayed, the products listing doesn't exists. Please, close the window.","Keine Kategorie wird angezeigt, das Produktlisting existiert nicht. Bitte schließen Sie das Fenster."
143
+ "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. Bitte schließen Sie das Fenster."
144
+ "Product(s) from the selected categories cannot be saved. The products listing doesn't exists.","Produkte von den gewählten Kategorien können nicht gespeichert werden. Die Produktliste existiert nicht."
145
+ "You are not allowed to save the products listing, so you cannot add products from a category.","Sie dürfen diese Produktliste nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. "
146
+ "%d product(s) added to the listing","%d Produkte zur Produkliste hinzugefügt."
147
  "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Fehler traten auf während des Speicherns der gewählten Kategorien. Bitte prüfen Sie den Fehlerlog."
148
+ "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Die Aktion, die Sie durchführen wollen, ist nicht möglich. Sie müssen zunächst den API Token authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozeß durchzuführen."
149
  "Listing name and website must be specified.","Listingname und Webseite müssen definiert werden."
150
  "We have detected and set for you the language configuration. Please, review it before to go further.","Wir haben die Sprache für Sie vorausgewählt. Bitte prüfen Sie, ob die Wahl richtig ist, bevor Sie fortfahren."
151
  "The listing has been saved.","Das Listing wurde gespeichert."
153
  "Listed listings cannot be deleted. Stop the listing first.","Aktive Listings können nicht gelöscht werden. Stoppen Sie die Listings zuerst."
154
  "Listing deleted","Listing entfernt"
155
  "%d products removed from listing","%d Produkte vom Listing entfernt."
156
+ "%d products are listed and could not be removed","%d Produkte sind eingestellt und können nicht entfernt werden."
157
+ "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","Der API Token und die Konfiguration sind nicht bereit für diese Aktion. Bitte prüfen Sie, dass der Token aktiv ist und die Gültigkeit nicht abläuft."
158
+ "A similar job is already running. This job won't be executed.","Es läuft bereits ein Vorgang. Ihre Aktion wird nicht ausgeführt."
159
+ "It's s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Es ist nicht möglich, diese Aktion durchzuführen. Sie müssen den API Token zunächst authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozess durchzuführen."
160
+ "An error occurred while starting this job. Please check your log file.","Ein Fehler trat auf beim Start des Vorgangs. Bitte prüfen Sie den Fehlerlog."
161
  "The job to check your products listing will start in few minutes. You can check the progression below.","Der Vorgang um Ihre Produktlistings zu überprüfen wird in wenigen Minuten starten. Sie können den Fortschritt unten einsehen."
162
+ "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","Wenn erfolgreich beendet, werden Ihre Produkte automatisch eingestellt. Falls Fehler auftreten, müssen Sie entscheiden, ob das Einstellen fortgesetzt oder überprüft werden soll."
163
  "There is no product ready to be listed. Please, add products to your products listing ""%s"".","Kein Produkt ist bereit um eingestellt zu werden. Bitte fügen Sie Produkt zu Ihrem Produktlisting ""%s"" hinzu."
164
  "There is no pending product to check.","Kein zu prüfendes Produkt vorhanden"
165
+ "The job to list your products listing will start in few minutes.","Der Vorgang zum Einstellen Ihrer Produkte wird in wenigen Minuten beginnen."
166
  "You can check the progression below.","Sie können den Fortschritten unten einsehen."
167
+ "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","Es gibt kein Produkt zum reaktivieren. Nur Produkte, die schon mal auf ricardo.ch.ch eingestellt wurden, können wieder aktiviert werden für das Produktlisting %d."
168
+ "Only listed product items can be stopped.","Nur eingestellte Produkte können deaktiviert werden."
169
  "The job to stop to list your products will start in few minutes.","Der Vorgang um Ihre Produkte zu beenden wird in wenigen Minuten beginnen."
170
  "Products listing(s) is/are successfully deleted.","Produktlisting(s) wurde(n) erfolgreich gelöscht."
171
+ "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s","Die folgenden Produktlisting-IDs wurden nicht gelöscht, da Sie immer noch aktiv auf ricardo.ch eingestellt sind:"
172
+ "An error occurred while trying to delete the products listing(s). Please, check your exception log.","Beim Löschen des/der Produktlisting(s) trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
173
  "No products selected.","Keine Produkte gewählt."
174
  "The configuration has been saved successfully.","Die Konfiguration wurde erfolgreich gespeichert."
175
+ "An error occurred while saving the configuration. Please, check your log files for more details.","Beim Speichern der Konfiguration trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog für weitere Informationen."
176
+ "It's just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","Dies ist nur eine Vorschau. Bitte denken Sie daran, dass die Darstellung auf ricardo.ch abweichen kann."
177
  "Log(s) is/are successfully deleted.","Log(s) wurde(n) erfolgreich gelöscht."
178
+ "An error occurred while trying to delete the listing log(s). Please, check your exception log.","Beim Löschen der Listing-Logs trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
179
+ "Job(s) is/are successfully deleted.","Job erfolgreich gelöscht."
180
  "The following job IDs have not been deleted because they are still running: %s","Die folgenden Aktions-IDs wurden nicht gelöscht, da Sie immer noch aktiv sind."
181
+ "An error occurred while trying to delete the job(s). Please, check your exception log.","Beim Löschen der Aktion(en) trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
182
  "ricardo.ch API Signup","ricardo.ch API Anmeldung"
183
  "API Signup","API Anmeldung"
184
  "ricardo.ch Assistant Portal","ricardo.ch Verkäuferportal"
186
  "Only Ajax call is allowed here.","Hier ist nur ein Ajax-Aufruf erlaubt."
187
  "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","Der Website Code von ricardo.ch ist nicht korrekt. Die Authorisierung konnte auf Seiten von Magento nicht gespeichert werden."
188
  "Your ricardo.ch account has been authorized to get access to the API.","Ihr ricardo.ch-Konto wurde erfolgreich authorisiert, um Zugang zur API zu erhalten."
189
+ "An error occurred while saving the token. Please, check your log files.","Beim Speichern des Tokens trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
190
  "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","Die Authorisierung wurde von ricardo.ch zurückgewiesen. Bitte kontaktieren Sie ricardo.ch um den Grund zu erfahren."
191
  "Sign Up to ricardo.ch API","Anmeldung zur ricardo.ch API"
192
  "API Authorization","API Authorisierung"
193
  "No Selection","Keine Auswahl"
194
  "Open ricardo.ch Category Window","Öffne ricardo.ch Kategorien Fenster"
195
  "Add products from selected categories","Füge Produkte von gewählten Kategorien hinzu"
196
+ "Only product types supported, enabled and not listed in other products listing will be added.","Nur Produkte, deren Typ unterstützt wird, die aktiv und nicht bereits eingestellt sind, werden hinzugefügt."
197
+ "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won't allow to add products of its subcategories.","Bitte achten Sie darauf, auch die Unterkategorien zu wählen. Wenn Sie nur eine Oberkategorie wählen können Produkte nicht zu deren Unterkategorien hinzugefügt werden."
198
+ "Create new listing","Neue Prouduktliste erstellen"
199
  "Show Synchronization Jobs","Zeige Synchronisierung-Aufträge"
200
  "General","Allgemeine API Konfiguration"
201
  "Products","Produkte"
210
  "Status","Status"
211
  "Action","Aktion"
212
  "Preview","Vorschau"
213
+ "Configure","Konfigurieren"
214
  "Remove","Löschen"
215
  "Are you sure to remove this/these product(s)?","Sind Sie sicher, dass Sie diese Produkte löschen möchten?"
216
  "Remove from list","Von der Liste löschen"
219
  "This product has been configured for %s %s","Diese Produkte wurde konfiguriert für %s %s"
220
  "The product has custom options, those will not be added to ricardo.ch!","Das Produkt hat individuelle Optionen, diese werden nicht zu ricardo.ch übertragen."
221
  "ID","ID"
222
+ "Add selected product(s)","Fügen Sie die gewählten Produkte hinzu"
223
  "Title","Titel"
224
+ "Website","Webseite"
225
  "Language","Sprache"
226
  "Product languages to synchronize to ricardo.ch","Produktsprachen, die mit ricardo.ch synchronisiert werden sollen."
227
+ "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch unterstützt zur Zeit nur zwei Sprachen: Deutsch und Französisch. Sie können wählen, in welcher Sprache Sie die Produktinformationen übertragen möchten (Titel, Untertitel, Beschreibung, etc)."
228
  "Default language to publish","Standardsprache bei der Veröffentlichung."
229
+ "Which language to publish by default to ricardo.ch when the product content is not available in a language?","Welche Sprache soll standarmässig zur Veröffentlichung bei ricardo.ch gewählt werden, wenn Produktinformationen in gewüschter Sprache nicht verfügbar sind?"
230
+ "Store View for %s","Shopansicht für %s"
231
  "Payment Methods","Zahlungsarten"
232
+ "Payment Description German","Beschreibung Zahlungsarten Deutsch"
233
+ "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Zeichen: %s. Max. 5 000 Zeichen. Beschreibung der Zahlungsarten für Kunden. Diese Infos werden zu ricardo.ch nur übertragen, wenn Sie die Zahlungsart ""Andere"" wählen."
234
  "Payment Description French","Beschreibung Zahlungsarten Französisch"
235
  "Shipping Methods","Versandarten"
236
  "Shipping Price","Versandkosten"
237
  "Free shipping","kostenloser Versand"
238
+ "Is Shipping fee cumulative","Versandkosten einzeln verrechnen"
239
+ "If you select this option, the shipping fee will be calculate for each sold product.","Wenn Sie diese Option wählen, werden die Versandkosten für jedes verkaufte Produkt einzeln berechnet."
240
+ "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","z.B. Ein Kunde kauft 3 Stück eines Artikels und die Versandkosten liegen bei jeweils 15 CHF. Die Versandkosten sind dann insgesamt 45 CHF. Lassen Sie das Feld leer, wenn Sie diese Option nicht wählen möchten."
241
  "Shipping Availability","Verfügbarkeit des Artikels"
242
+ "Shipping Description German","Versandbeschreibung Deutsch"
243
  "Characters: %s. Max. 5 000 characters","Zeichen: %s. Max. 5 000 Zeichen"
244
+ "Shipping Description French","Versandbeschreibung Französisch"
 
245
  "Category","Kategorie"
246
  "ricardo.ch Category","ricardo.ch Kategorie"
247
+ "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Nutze Magento / ricardo.ch Kategorie-Mapping (wenn ein Mapping fehlt, wird eine Fehlermeldung ausgegeben, während die Synchronisierung zu ricardo.ch vorbereitet wird.)"
248
  "Select ricardo.ch Category","Wähle ricardo.ch Kategorie"
249
  "Select the category","Wähle Kategorie"
250
+ "Type of sales","Angebotsformat"
 
251
  "Start price","Startpreis"
252
+ "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Spanne von Fr. 0.05 bis Fr. 1 000 000. Wenn Kreditkarte als Zahlungsart verfügbar und aktiv, liegt die Spanne zwischen Fr. 0.05 und Fr. 2 999.95."
253
  "Increment","Erhöhtungsschritt"
254
  "Currency","Währung"
255
  "Allow Direct Buy","Erlaube Sofort-Kaufen"
256
  "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Befüllen Sie das Feld ""Sofort-Kaufen"" unten, um den Sofort-Kaufen-Preis zu definieren. <strong>Hinweis</strong>: wenn auf ""Ja"" gestellt, wird die ""individuelle Verfügbarkeit"" auf 1 gestellt."
257
  "Source","Quelle"
258
  "Price Change","Preisspanne"
259
+ "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","Für Produkte mit Fixpreis ist der Mindestpreis Fr. 0.05 und der Maximalpreis Fr. 2 999.95 sofern die Zahlungsart Kreditkarte aktiviert ist."
260
+ "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","Für Auktionen der Mindest-Sofort-Kaufen Preis ist Fr. 0.1 und muss größer sein, als der Startpreis."
261
+ "If not correctly defined, the minimum and maximum values will be automatically set.","Wenn nicht korrekt definiert, werden die Mininal- und Maximal-Werte automatisch gesetzt."
262
  "Schedule","Zeitplan"
263
  "Start","Start"
264
  "Starting date must start minimum in one hour and maximum 30 days in the future.","Der Verkauf kann frühestens in einer Stunde, spätestens in 30 Tagen starten."
265
  "Start immediately","Sofort starten"
266
+ "Start from","Starte am"
267
  "End","Ende"
268
  "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","Der Verkauf darf frühestens in 24 Stunden, spätestens 10 Tage nach dem Startdatum enden."
269
  "End after %s days","Ende nach %s Tagen"
278
  "Condition Product Source","Zustand des Produkts"
279
  "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Möchten Sie den Zustand des Produkts über das Produktattribut bestimmen? Falls nicht und Sie hier ""Nein"" eintragen, wird der Standardwert aus dem Produktlisting übernommen."
280
  "Warranty","Garantie"
281
+ "Warranty description German","Garantiebeschreibung Deutsch"
282
  "Characters %s. Max. 5 000 characters","Zeichen %s. Max. 5 000 Zeichen"
283
+ "Warranty description French","Garantiebeschreibung Französisch"
284
  "Stock Management","Lagerverwaltung"
285
+ "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Spanne 1 bis 999. Wenn Sie die Lagerhaltungs-Option nutzen, wird die Menge der Produkte mit dem Feld ""Menge"" befüllt. Die maximale Menge ist jedoch 999."
286
  "Use product inventory","Nutze Lagerbestand des Produkts"
287
  "Use custom qty","Nutze spezifizierte Menge"
288
+ "Customization","Personalisierung"
289
+ "Template","Vorlage"
290
+ "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","Um eine Vorlage zu erstellen, gehen Sie zu Ihrem <a href=""%s"">ricardo.ch Konto</a> in ""Meine Verkäufe""."
291
  "Promotion","Promotion"
292
  "Privilege Space","Promo-Fenster"
293
+ "PREMIUMHOMEPAGE","Promo-Fenster"
294
+ "Privilege space on main category page and search results. More information about this feature <a onclick=\window.open('%s');\"">here</a>""","Promo-Fenster auf der Hauptkategorieseite und Suchergebniss Seite. Mehr Informationen über dieses Feature finden Sie <a onclick=\window.open('%s');\"">hier</a>"""
295
  "Home Privilege Space","Promo-Fenster Homepage"
296
  "Privilege space on the homepage. More information about this feature <a onclick=""window.open('%s');"">here</a>","Promo-Fenster auf der Homepage. Mehr Informationen über dieses Feature bekommen Sie <a onclick=""window.open('%s');"">hier</a>"
297
  "Home Space","Promo-Fenster Homepage"
298
  "These options will not be activated for products having no picture.","Diese Option wird nicht aktiviert für Produkte ohne Bilder."
299
+ "Until sold","Bis ausverkauft"
300
+ "Listed items cannot be modified. Stop the listing first to make changes.","Eingestellte Produkte können nicht modifiziert werden. Beenden Sie zunächst das Listing um Änderungen vornehmen zu können."
301
  "Back to the list ""%s""","Zurück zur Liste ""%s"""
302
  "Configure product '%s'","Konfiguriere Produkt '%s'"
303
  "Configure all %s selected products","Konfiguriere alle %s gewählten Produkte"
304
  "No ricardo.ch category found","Keine ricardo.ch Kategorie gefunden"
305
  "Give a name","Geben Sie einen Namen an"
306
  "Select a website","Wählen Sie eine Website"
307
+ "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","Die Website(s) müssen für diese Extension konfiguriert und aktiviert sein. Wenn dieses Feld leer ist oder etwas fehlt, <a href=""%s"">konfigurieren</a> Sie bitte die Extension."
308
  "Cancel","Abbrechen"
309
+ "Listed products:","Eingestellte Produkte"
310
+ "Not listed products:","Nicht eingestellte Produkte"
311
  "Add Product(s) from category","Füge Produkt(e) von der Kategorie hinzu"
312
  "Add Product(s)","Füge Produkt(e) hinzu"
313
+ "Stop","Stopp"
314
+ "Remove article listed on ricardo.ch","Entferne auf ricardo.ch eingestellte Artikel"
315
+ "Check & List","Prüfen & Einstellen"
316
+ "Check & list only pending & error items","Prüfen & Einstellen wartender und fehlerhafter Artikel"
317
  "List","Einstellen"
318
+ "List only ""Ready to list"" items","Nur Produkte einstellen, die den Status ""Fertig zum Einstellen"" haben"
319
  "Edit Products Listing '%s'","Bearbeite Produktlisting '%s'"
320
  "New Products Listing","Neues Produktlisting"
321
  "Websites","Websites"
326
  "View Logs","Siehe Logs"
327
  "Change status","Ändere Status"
328
  "Delete","Löschen"
329
+ "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is ""Listed""","Sind Sie sicher, dass Sie die Produktlisting(s) löschen möchten? Beachten Sie, das nur aktive Listen gelöscht werden können."
330
  "Products Listing Log ""%s""","Produktlistings Log ""%s"""
331
  "Edit ""%s""","Bearbeite ""%s"""
332
  "Job ID","Job ID"
339
  "Job Type","Job Typ"
340
  "Job Message","Job Nachricht"
341
  "Current Progress","Aktueller Fortschritt"
342
+ "Started at","Gestartet am"
343
  "Ended at","Beendet am"
344
  "Are you sure that you want to delete this/these job(s)?","Sind Sie sicher, dass Sie diese Vorgänge löschen möchten?"
345
  "Show Products Listing","Zeige Produktlisting"
350
  "You may also access to the %s content of this page</a> in a new window.","Sie können den %s Inhalt dieser Seite auch </a> in einem neuen Fenster bearbeiten."
351
  "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Ihre ricardo.ch-API-Token-Daten laufen in %s Tagen für diese Webseite ""%s"" ab."
352
  "No ricardo.ch API Authorization have been found for the website ""%s"".","Keine ricardo.ch-API-Authorisierung wurde für diese Website ""%s"" gefunden."
353
+ "You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," Sie müssen Ihr Konto authorisieren, um Zugang zur ricardo.ch-API zu bekommen. Sie können das mittels der <a href=""%s"">ricardo.ch Authorisierungsseite</a> tun. Wenn Sie das nicht tun, werden alle Aufrufe von und zu ricardo.ch blockiert."
354
  "To hide this message, you have to <a href=""%s"">disable the extension</a>.","Um diese Nachricht zu verbergen, müssen Sie die Extension <a href=""%s"">deaktivieren</a>."
355
  "The Official ricardo.ch Extension has been installed.","Die offizielle ricardo.ch Extension wurde installiert."
356
  "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Bitte klicken Sie <a href=""%s"">hier</a> um den Zugang zur ricardo.ch API zu konfigurieren."
357
  "Latest message for the selected job","Letzte Nachricht für den gewählten Vorgang"
358
+ "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Bearbeiten</a> Sie Ihre Produktlistings, wenn notwendig"
359
  "No message found.","Keine Nachricht gefunden."
360
+ "Confirm","Bestätigen"
361
  "More Views","Mehr Ansichten"
362
  "%s days 0:0:0","%s Tage 0:0:0"
363
  "Starting price","Startpreis"
364
+ "Place a bit","Gebot abgeben"
365
  "Quantity","Anzahl"
366
  "of %s","von %s"
367
  "Details","Details"
379
  "Shipping Price:","Versandkosten:"
380
  "Shipping Availability:","Versandverfügbarkeit:"
381
  "Shipping Description (CH):","Versandkosten Beschreibung (CH):"
382
+ "You must select a ricardo.ch Category if you set this option","Sie müssen eine ricardo.ch-Kategorie wählen, um diese Option zu aktivieren"
383
  "The task will start few minutes","Der Vorgang wird in ein paar Minuten starten"
384
  "No progress","Kein Fortschritt"
385
  "The product list has been stopped.","Die Produktliste wurde beendet."
 
386
  "ricardo.ch Lifetime Sales","ricardo.ch Gesamtumsatz"
387
  "Turnover per month","Umsatz pro Monat"
388
  "Best Sellers","Meistverkaufte Produkte"
389
+ "Qty sold","Verkaufte Menge"
390
+ "Product Name","Produktbezeichnung"
391
  "SKU","SKU"
392
  "Price","Preis"
393
  "Your ricardo.ch API Token","Ihre ricardo.ch API Token"
394
+ "PREMIUMCATEGORYBRONZE","Klein"
395
+ "PREMIUMCATEGORYSILVER","Mittel"
396
+ "PREMIUMCATEGORYGOLD","Groß"
 
 
397
  "TYPE_BANK_TRANSFER","Banküberweisung"
398
+ "TYPE_CASH","Barzahlung"
399
  "TYPE_CREDIT_CARD","Kreditkarte via ricardo.ch"
400
+ "TYPE_OTHER","Andere Zahlungsmethoden"
 
401
  "UNKNOWNPROPERTY","Unbekannter Besitzer"
402
  "CUSTOMERNOTARTICLEOWNER","Der Kunde darf das Produkt nicht bearbeiten, da er nicht der Besitzer ist."
403
  "CHECKPASSWORDWRONGPASSWORD","Das Passwort ist falsch."
409
  "TOKENEXPIRED","Token ausgelaufen für API "
410
  "ANONYMOUSNOTALLOWED","Anonymer Aufruf ist nicht erlaubt"
411
  "TEMPORAYCREDENTIALEXPIRED","temporärer Zugang abgelaufen für API"
412
+ "TEMPORAYCREDENTIALUNVALIDATED","temporärer Zugang für API nicht gültig"
413
  "SESSIONEXPIRED","Session abgelaufen"
414
+ "UPDATEPASSWORDPOLICYINVALID","CustomerUpdatePassword wird mit einem Passwort mit invaliden Bedingungen genutzt. Es müssen mindestens 8 Zeichen sein, davon mindestens ein Großbuchstabe und ein Nicht-Alphanumerisches Zeichen."
415
  "AFTOKENERROR","Anti Forgery token error "
416
  "UNKNOWNPARTNERSHIP","Unbekannte Partnerschaft"
417
  "CHECKPASSWORDPENDINGEMAILVALIDATION","Nutzer hat seine E-Mail Adresse nicht validiert"
420
  "ACCOUNTCLOSED","Das Kundenkonto wurde geschlossen."
421
  "METHODNOTALLOWED","Die Partnerschaft stimmt nicht mit der gewählten Methode überein."
422
  "TOKEN_AUTHORIZATION","Die Authorisierung muss nochmal durchgeführt werden"
 
423
  "CLOSEAUCTIONFAILED","Auktion konnte nicht geschlossen werden"
424
  "CLOSECLASSIFIEDFAILED","Ein Produkt konnte nicht klassifiziert werden"
425
  "DELETEPLANNEDFAILED","Ein Produkt konnte nicht gelöscht werden"
430
  "CUSTOMERNOTFOUND","Kunde nicht gefunden"
431
  "EMPTYIPADDRESS","Die IP Adresse ist nicht definiert"
432
  "TECHNICALPROBLEM","Technischer Fehler"
433
+ "ARTICLESAMOUNTLIMIT","Limite für die Menge pro Übertragung liegt bei 100 "
434
  "LISTOFARTICLESEMPTY","Liste der Produkte ist leer"
435
  "UNKNOWNCATEGORYNAME","Kategoriename ist nicht bekannt"
436
+ "EMPTYCOUNTRYID","Länder ID darf nicht leer sein."
437
+ "EMPTYPARTNERID","Partner ID darf nicht leer sein."
438
+ "EMPTYCATEGORY","Kategorie darf nicht leer sein."
439
+ "EMPTYRELISINFOS","Reaktivierungsinformation fehlt"
 
440
  "EMPTYCUSTOMER","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
441
+ "UNKNOWNPARTNERID","Unbekannte Partnerschaft"
442
+ "UNKONWNCATEGORYID","Die übergebene Kategorie ID existiert nicht"
443
  "INVALIDDURATION","Die angefragte Dauer ist nicht möglich."
444
+ "RELISTCOUNTEXCEEDED","Bitte beachten Sie, dass Sie ein Artikel höchstens 9 Mal reaktiviert werden kann. "
445
  "STARTPRICETOOHIGH","Bitte setzen Sie einen Startpreis, der gleich oder tiefer als CHF 10 000 000 000 ist."
446
  "STARTPRICETOOLOW","Bitte setzen Sie einen Startpreis, der gleich oder höher als CHF 0.05 ist."
447
  "INVALIDARTICLETYPEFORCATEGORY","Bitte beachten Sie, dass diese Kategorie-Änderung nicht erlaubt ist."
449
  "CATEGORYDEDICATEDTOUSERS","Leider können Sie in dieser Kategorie keine Artikel einstellen. Bitte wählen Sie eine andere Kategorie aus oder kontaktieren Sie unseren Kundendienst."
450
  "INVALIDTEMPLATEID","Bitte überprüfen Sie ob die ausgewählte Vorlage in Ihrem My Ricardo vorhanden ist."
451
  "EMPTYTITLE","Bitte tragen Sie einen Titel in das entsprechende Feld ein."
452
+ "EMPTYDESCRIPTION","Bitte tragen Sie eine Artikelbeschreibung in das entsprechende Feld ein."
453
  "EMPTYSUBTITLE","Bitte tragen Sie einen Untertitel in der zweiten Sprache ein."
454
  "TOOLONGTITLE","Bitte beachten Sie, dass der Titel nicht mehr als 40 Zeichen enthalten darf."
455
  "TOOLONGDESCRIPTION","Bitte beachten Sie, dass Ihre Artikel-Beschreibung nicht mehr als 65'000 Zeichen enthalten darf."
468
  "NODELIVERYCONDITION","Bitte wählen Sie eine Versandart aus. "
469
  "DELIVERYCOSTTOOHIGH","Die von Ihnen definierte Versandkosten sind zu hoch. Bitte wählen Sie einen Betrag der kleiner ist als CHF 210'000."
470
  "MANUALINCREMENTNOTALLOWED","Der Erhöhungschritt kann nicht manuell definiert werden."
471
+ "PLANNEDSCHEDULETOOLOW","Die geplante Startzeit muss mindestens eine Stunde in der Zukunft liegen."
472
  "PLANNEDSCHEDULETOOHIGH","Die von Ihnen definierte ""Startzeit"" für das Einstellen des Artikels liegt zuweit in der Zukunft. Bitte planen Sie max. 30 Tage im Voraus. "
473
+ "REFERENCETOOLONG","Die von eingegebene Referenznummer ist zu lang. Bitte wählen Sie eine Referenznummer mit maximal 40 Zeichen."
474
+ "INVALIDQUANTITYFORAUCTIONBUYNOW","Bitte beachten Sie, dass die Option Sofort-Kaufen nur bei Angeboten mit der Stückzahl 1 gewählt werden kann."
475
  "BUYNOWLOWERTHANSTARTPRICE","Bitte setzen Sie einen Sofort-Kaufen-Preis, der höher als Ihr Startpreis ist."
476
  "RICARDOPAYNOCARSANDBIKES","Über ricardo.ch können keine Autos oder Fahrräder verkauft werden"
477
+ "RICARDOPAYWRONGPAYMENTCONDITIONS","Die gewählte Zahlungsart kann nicht mit der Kreditkartenzahlung kombiniert werden. Bitte wählen Sie eine andere Methode aus."
478
  "RICARDOPAYPRICETOOHIGH","Der Preis ist zu hoch."
479
  "RICARDOPAYWALLETBLOCKED","Das ricardo.ch Pay-Wallet wurde blockiert."
480
  "MAXPICTURESIZEREACHED","Bitte beachten Sie, dass die gesamte Grösse für das Hochladen Ihrer Bilder auf 20 MB beschränkt ist. "
481
  "ERRORRESIZINGPICTURE","Während der Verarbeitung Ihrer Bilder ist ein Fehler aufgetreten. Wir bitten Sie um Entschuldigung."
482
+ "MAXPICTURESCOUNTREACHED","Bitte beachten Sie, dass die maximale Anzahl Bilder pro Artikel auf 10 beschränkt ist."
483
  "INVALIDPROMOTION","Ungültige Promotion."
484
  "INVALIDPROMOTIONCOMBINATION","Bitte beachten Sie, dass die mehrfache Auswahl von Anzeigepaketen nicht möglich ist. "
485
+ "NOTCLOSED","Die Bezahloption „Kreditkartenzahlung“ steht für Autozubehör nicht zur Verfügung. Bitte deaktivieren Sie diese Option."
486
  "EMPTYARTICLEINFOS","Bitte wählen Sie eine Option, um den Zustand Ihres Artikels zu definieren."
487
  "EMPTYDELIVERY","Bitte wählen Sie eine Versandart aus."
488
  "EMPTYPROMOTIONS","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
554
  "CANTUPDATEPICTUREONARTICLEWITHBID","Das Bild kann bei einem Angebot das bereits Gebote erhalten hat nicht aktualisiert werden."
555
  "HTMLTAGSNOTALLOWED","Bitte beachten Sie, dass HTML-Tags in diesem Beschreibungsfeld nicht unterstützt werden"
556
  "WRONGPAYMENTCONDITIONS","Falsche Zahlungsarten"
557
+ "EMPTYPAYMENTCONDITIONIDS","Fehlende Zahlungsarten"
558
+ "NODETAILS","Keine Details verfügbar."
559
+ "ARTICLEALREADYHASCARDPAYMENT","Produkt hat bereits eine Zahlungsart."
560
  "ERRORINSERTINGCARDPAYMENT","Fehler bei der Eingabe der Kartenzahlung."
561
  "ARTICLEDOESNOTHAVECARDPAYMENT","Produkt hat keine Kartenzahlung."
562
  "ERRORREMOVINGCARDPAYMENT","Fehler beim Entfernen der Kartenzahlung"
563
+ "RICARDOPAYNOTACTIVATED","ricardo.ch PayU ist nicht aktiviert."
564
+ "EMPTYPAYMENTMETHODSIDS","Leere Zahlungsart-ID"
565
+ "EMPTYARTICLEID","Leere Produkt-ID"
566
  "INVALIDCARDCOMBINATIONWITHDELIVERYCONDITION","Ungültige Karte in Kombination mit den Versandkonditionen"
567
  "NUMBEROFARTICLELIMITED","Anzahl der Produkte ist limitiert."
568
  "PAYMENTMETHODNEEDALTERNATEONE","Alternative Zahlungsart notwendig."
569
+ "WRONGPAYMENTMETHODS","Falsche Zahlungsart"
570
+ "CUMULATIVESHIPPINGNOTALLOWED","Kumulative Versandkosten nicht erlaubt."
 
571
  "MAXPICTURESCOUNTREACHED","maximale Bilderanzahl erreicht"
572
+ "MAXPICTURESIZEREACHED","maximale Bildgröße erreicht"
573
  "ERRORRESIZINGPICTURE","Fehler bei der Grössenänderung der Bilder"
574
  "PICTUREINDEXDOESNOTEXIST","Bildindex existiert nicht"
575
  "EMPTYPICTURECONTENT","leerer Bildinhalt"
576
  "NOPICTURES","keine Bilder"
577
  "INVALIDPICTUREINDEX","ungültiger Bildindex"
578
+ "MAXLOGOPICTURESIZEREACHED","maximale Logogröße erreicht"
579
+ "ERRORRESIZINGLOGOPICTURE","Fehler bei der Größenänderung des Logos"
 
580
  "NOTALLOWEDTOSELL","Produkt nicht erlaubt zu verkaufen"
581
  "BILLINGERROR","BILLINGERROR"
582
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
641
  "UNABLETOINSERT","UNABLETOINSERT"
642
  "CREDITLIMITEXCEEDED","Kreditlimit erreicht. Bitte, kontaktieren Sie ricardo.ch"
643
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
 
644
  "No Options because API is not configured","No Options because API is not configured"
645
  "No Options because API has a problem","No Options because API has a problem"
646
+ "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.","Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
647
+ "Security error occurred with the ricardo API. Please, check your log files.","Security error occurred with the ricardo API. Please, check your log files."
648
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
649
+ "Product Price of %s CHF is incorrect. Minimum price is %s.","Produktpreis von Fr. %s ist falsch. Minimum Preis ist Fr. %s."
650
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
651
  "Following error(s) appeared:","Following error(s) appeared:"
652
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
653
+ "The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible.","The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible."
654
+ "Merge Descriptions","Beschreibungen zusammenführen"
655
+ "Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description.","Beschreibung und Kurzbeschreibung zusammenführen und als eine Artikelbeschreibung auf ricardo.ch veröffentlichen. Die Kurzbeschreibung wird der erste Teil und die normale Beschreibung der zweite Teil der ricardo.ch Artikelbeschreibung sein."
656
+ "Only 10 pictures maximum allowed.","Maximal 10 Bilder erlaubt."
657
+ "The starting date must start one hour in future. It will be automatically updated to list on ricardo.","Das Startdatum muss mindestens eine Stunde in der Zukunft liegen. Es wird automatisch angepasst."
658
+ "Enter product name: e.g. iphone","Produktbezeichnung eingeben (z.B. Iphone)"
659
+ "Sorry, no product found for fees calculation.","Es wurden keine Artikel gefunden um die Gebühren zu berechnen."
660
+ "Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch.","Bitte schliessen Sie dieses Fenster und beheben Sie die Fehler, damit die Artikel auf ricardo.ch eingestellt werden können."
661
+ "Product Listing Configuration","Konfiguration Produklisting"
662
+ "Currency Conversion","Währungsumrechnung"
663
+ "The store's base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation.","Die Webshop Standard-Währung ist %2$s. Auf ricardo.ch kann nur in %1$s eingestellt werden. Bitte beachten Sie, dass alle Preise in %1$s umgerechnet werden. Lesen Sie die Dokumentation für weitere Erklärungen."
664
+ "Currency Rate not configured","Wechselkurs nicht konfiguriert"
665
+ "Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed.","Wechselkurs nicht definiert für CHF. Bitte konfigurieren Sie den Wechselkurs bevor Sie weiterfahren."
666
+ "Replace Carriage Return with br HTML Tag","Zeilenumbrüche umwandeln um Abstände beizubehalten"
667
+ "Do you want to replace into the description the carriage return with <br> HTML Tag?","Wollen Sie Zeilenumbrüche in HTML Tags des Typs <br> umwandeln? Dadurch werden die Abstände zwischen ihren Textblöcken beibehalten."
668
+ "Product listing & promotion","Produktliste & Promotionen"
669
+ "Total price","Gesamtpreis"
670
+ "Important","Wichtig"
671
+ "Listing Fees","Einstellgebühren"
672
+ "ricardo.ch does invoices in %s","ricardo.ch verrechnet ausschliesslich in %s"
673
+ "Sales Fee (following the <a href=""%s"" target=""_blank"">fees rules from 01.07.2014</a>)","Abschlussgebühren (gemäss <a href=""%s"" target=""_blank"">Gebührenreglement vom 01.07.2014</a>)"
674
+ "With the confirmation of the publication, you accept the <a href=""%s"" target=""_blank"">terms and conditions</a> and <a href=""%s"" target=""_blank"">privacy policy</a>","Mit dem Bestätigen und Publizieren akzeptiere ich die <a href=""%s"" target=""_blank"">AGB</a>und die <a href=""%s"" target=""_blank"">Datenschutzerklärung</a> von ricardo.ch"
675
+ "Confirm, check and List","Bestätigen, Prüfen und Einstellen"
676
+ "Send us your configuration","Senden Sie uns Ihre Konfiguration"
677
+ "Export your configuration","Ihre Konfiguration exportieren"
678
+ "Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc...","Möchten Sie über Fehler per Email benachrichtigt werden? Emails werden an die Email Adresse des allgemeinen Kontaktes in Magento versendet im Falle von API Fehlermeldungen, Ablauf von Token, etc…"
app/locale/de_DE/Diglin_Ricento.csv CHANGED
@@ -2,57 +2,55 @@
2
  "Dashboard","Dashboard"
3
  "Products Listing","Produktübersicht"
4
  "Logs","Logs"
5
- "ricardo.ch Assistant","ricardo.ch Assistent"
6
  "Configuration","Konfiguration"
7
  "Ricento by Diglin GmbH","Ricento von der Diglin GmbH"
8
  "Log","Log"
9
- "ricardo.ch Payment Methods","ricardo.ch Zahlarten"
10
  "ricardo.ch Shipping","ricardo.ch Versandarten"
11
  "Admin Email Notification","Admin Email Benachrichtigung"
12
  "Private message","Private Nachricht"
13
- "Global Configuration","Globale Konfiguration"
14
  "Merge Order","Bestellungen zusammenfassen"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","Wenn ein Kunde mehrere Produkte innerhalb von 30 Minuten bestellt, möchten Sie, dass die Bestellungen zusammengefasst werden?"
16
  "Shipping Calculation","Versandkosten-Kalkulation"
17
- "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>","Sie können entscheiden, wie die Versandkosten berechnet werden, wenn eine Bestellung zusammengefasst wurde.<br>"
18
- " ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>","""Höchster Preis"": Diese Methode findet das Produkt mit den höchsten Versandkosten und nutzt diesen Versandkosten für die Gesamtsumme.<br>"
19
- " ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","""Kumulativ"": diese Methode addiert die Versandkosten der einzelnen Produkte"
20
  "Send Account Creation Confirmation Email","Sende Willkommensbestätigung per Mail"
21
- "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Möchten Sie eine Bestätigungsmail (via ricardo.ch API) senden, wenn ein Kunde ein Konto erstellt hat?"
22
  "Send Email for new order","Sende Email beim Eingang einer neuen Bestellung"
23
- "Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Möchten Sie eine Bestätigungsmail (via ricardo.ch API) senden, wenn ein Kunde ein Konto erstellt hat?"
24
  "API Token Configuration","API Token Konfiguration"
25
  "General API Config","Allgemeine API Konfiguration"
26
  "ricardo.ch Extension enabled","ricardo.ch Extension aktiviert"
27
  "Development Mode","Entwicklermodus"
28
  "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","Wenn Sie diese Funktion aktivieren, werden alle API-Anfragen an die ricardo.ch BETA Umgebubg verschickt. Stellen Sie sicher, dass Sie die dafür passenden API-Keys und Passwörter eingetragen haben."
29
  "Debug","Debug"
30
- "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","In diesem Modus werden alle Anfragen an die ricardo.ch-API in die Datei var/log/ricento.log geschrieben. Aktivieren Sie diesen Modus, wenn Sie Probleme haben und schicken Sie uns diese Datei zu. Damit können wir Ihnen helfen. Die Passwörter werden anonymisiert. Achtung: Das Log Datei Größe kann schnell wachsen."
31
  "German API Token","Deutscher API Token"
32
- "PROD German Partner Key","PROD Deutscher Partner Schlüssel"
33
- "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Der Partner Schlüssel hat das folgende Format: '0F12345-1234-1234-1234-1234567890'. Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
34
- "PROD German Partner Password","PROD Deutsches Partner Passwort"
35
  "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
36
- "DEV German Partner Key","Entwicklermodus deutscher Partner Schlüssel"
37
- "DEV German Partner Password","Entwicklermodus deutsches Partner Passwort"
38
  "French API Token","Französischer API Token"
39
- "PROD French Partner Key","PROD Französischer Partner Schlüssel"
40
- "PROD French Partner Password","PROD Französischer Partner Passwort"
41
- "DEV French Partner Key","Entwicklermodus französischer Partner Schlüssel"
42
- "DEV French Partner Password","Entwicklermodus französischer Partner Passwort"
43
- "Cleanup Synchronization Jobs Log","Leere Log für Synchronisation-Jobs"
44
  "Enabled","Aktiviert"
45
- "Keep for X days","Halte für x Tage vor"
46
- "Cleanup Listings Log","Leere Log für Produktlisten"
47
  "ricardo.ch API Payment Methods","ricardo.ch API Zahlungsarten"
48
  "Bank Transfer Instructions","Instruktionen Bank-Überweisung"
49
  "Accepted Currency","Akzeptierte Währung"
50
- "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","Lagerbestand auf 1 gesetzt, da die Zahlart ""Direkt Kaufen"" nicht mehr als einen Artikel erlaubt."
51
  "Invalid start date.","Ungültiges Startdatum"
52
  "The end date must be in the future.","Das Enddatum muss in der Zukunft liegen."
53
- "Listed listings cannot be modified. Stop the listing first to make changes.","Aktive Listungen können nicht verändert werden. Beenden Sie die Listung, um Änderungen vornehmen zu können."
54
  "An error occurred while saving the configuration.","Ein Fehler trat beim Speichern der Konfiguration auf."
55
- "ricardo.ch Service Model doesn\'t exists.","ricardo.ch Service Model existiert nicht."
56
  "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","ricardo.ch API Daten sind nicht vorhanden. Bitte tragen Sie zunächst die Daten ein."
57
  "API language provided for the Service Manager is not supported.","API Sprache für den Service Manager wird nicht unterstützt."
58
  "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Fehler beim Verbinden mit der ricardo.ch API. Bitte checken Sie Ihre Log Dateien, um eine genauere Fehlerbeschreibung zu erhalten."
@@ -61,16 +59,16 @@
61
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
62
  "The product has been sold","Das Produkt wurde verkauft."
63
  "Customer creation failed! ricardo.ch transaction cannot be added.","Kunde konnte nicht angelegt werden. ricardo.ch Bestellung konnte nicht übertragen werden."
64
- "Order automatically generated by the ricardo.ch Extension.","Bestellung(en) wurde(n) automatisch durch das ricardo.ch Modul erstellt."
65
  "Payment is pending","Bezahlung ausstehend"
66
- "Payment has been completed on ricardo.ch side","Bezahlung wurde bei ricardo.ch durchgeführt."
67
  "Order canceled on ricardo.ch side","Bezahlung wurd bei ricardo.ch storniert."
68
  "Country Code is not available. Please contact the author of this extension or support.","Ländercode ist nicht verfügbar. Bitte kontaktieren Sie den Autor dieses Moduls für Support."
69
  "Report: %d success, %d warning(s), %d error(s)","Report: %d erfolgreich, %d Warnung(en), %d Fehler"
70
- "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">click here</a>. Products with an error won't be synchronized, you have to fix the problem first.","Erfolgreich geprüfte Produkte werden gelistet. Um Produkte mit Warnungen zu listen, klick Sie bitte <a href=""%s"">hier</a>. Produkte mit Fehlern werden nicht übertragen, Sie müssen die Fehler zuerst beheben."
71
- "The product is now live on ricardo.ch","Das Produkt ist nun live auf ricardo.ch."
72
  "Sorry, the product has not been sold","Sorry, das Produkt wurde nicht verkauft."
73
- "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","Der Artikel ist bereits gelistet oder hat bereits eine Artikelnummer bei ricardo.ch."
74
  "The product has been removed from ricardo.ch","Das Produkt wurde bei ricardo.ch entfernt."
75
  "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","Das Produkt wurde nicht bei ricardo.ch entfernt. Wahrscheinlich weil jemand für das Produkt geboten oder es gekauft hat."
76
  "Report: %d success, %d error(s)","Report: %d erfolgreich, %d Fehler"
@@ -104,12 +102,12 @@
104
  "Buy now","Sofort-Kaufen"
105
  "Highest Price","Höchster Preis"
106
  "Cumulative","Kumulativ"
107
- "Pending","Verarbeitung"
108
- "Running","Laufend"
109
- "Ready","Fertig"
110
- "Completed","Komplett"
111
  "Products Check Job","Produkt-Check Job"
112
- "List Job","List Job"
113
  "Stop List Job","Stop Einstellen Job"
114
  "Sync Order Job","Sync Bestellung Job"
115
  "Relist Job","Reaktivierung Job"
@@ -126,29 +124,28 @@
126
  "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Titel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
127
  "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Untertitel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
128
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Beschreibung wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
129
- "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Individuelle Optionen werden nicht unterstützt. Sie werden nicht zu ricardo.ch übertragen und ignoriert."
130
- "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","Das Hauptprodukt oder seine verknüpften Produkte sind nicht auf Lager oder der Lagerbestand ist nicht hoch genug."
131
- "Only %s currency is supported. No conversion will be done.","Nur die Währung %s wird unterstützt. Es wird keine Umrechnung vorgenommen."
132
- "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","Sie müssen eine ricardo.ch-Kategorie für dieses Produkt wählen. Prüfen Sie, ob Sie das Produkt auf Produktlisting-Level oder Magento-Kategorie-Level gesetzt haben."
133
- "Payment and/or Shipping combination are not correct.","Zahlung und/oder Versand-Kombination sind nicht korrekt."
134
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","Sie können keinen Startpreis für eine Auktion von %2$s festlegen, wenn Sie ""Sofort-Kaufen"" mit dem Produktpreis von %1$s anbieten."
135
- "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Aus Sicherheitsgründen ist eine Kreditkarten-Zahlung bei Beträgen von CHF %s.- nicht möglich für ""Sofort-Kaufen"". Bitte wählen Sie andere Zahlungsmethoden oder passen Sie den Preis an. Der Preis muss zwischen %s und %s liegen."
136
- "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","Das Enddatum ist zu früh oder zu spät. Minimale erlaubte Zeitspanne: %s Tage - maximale erlaubte Zeitspanne: %s Tage"
137
- "You cannot use the privilege spaces as you do not have any pictures for this product.","Sie können keine Sonderfelder nutzen, da Sie keine Bilder für dieses Produkt hinterlegt haben."
138
  "This increment value is not possible for this start price.","Der angegebene Erhöhungsschritt ist nicht möglich für diesen Startpreis."
139
  "Only the following combinations are possible:","Nur die folgenden Kombinationen sind möglich:"
140
- "Start price is between","Startpreis ist zwischen"
141
- "Increment must be between","Erhöhungsschritt muss sein zwischen "
142
- "This payment method combination is not possible.","Diese Zahlmethoden-Kombination ist nicht möglich."
143
  "The following combinations are possible:","Die folgenden Kombinationen sind möglich:"
144
- "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","Es ist nicht möglich, die Versandmethode ""Andere"" mit der Zahlmethoden ""Kreditkarte"" zu kombinieren."
145
- "No category will be displayed, the products listing doesn\'t exists. Please, close the window.","Keine Kategorie wird angezeigt, das Produktlisting existiert nicht. Bitte schließen Sie das Fenster."
146
  "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. Bitte schließen Sie das Fenster."
147
- "Product(s) from the selected categories cannot be saved. The products listing doesn\'t exists.","Produkte von den gewählten Kategorien können nicht gespeichert werden. Das Produktlisting existiert nicht."
148
- "You are not allowed to save the products listing, so you cannot add products from a category.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. "
149
- "%d product(s) added to the listing","%d Produkte zum Produktlisting hinzugefügt."
150
  "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Fehler traten auf während des Speicherns der gewählten Kategorien. Bitte prüfen Sie den Fehlerlog."
151
- "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Die Aktion, die Sie durchführen wollen, ist nicht möglich. Sie müssen zunächst das API Token authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozeß durchzuführen."
152
  "Listing name and website must be specified.","Listingname und Webseite müssen definiert werden."
153
  "We have detected and set for you the language configuration. Please, review it before to go further.","Wir haben die Sprache für Sie vorausgewählt. Bitte prüfen Sie, ob die Wahl richtig ist, bevor Sie fortfahren."
154
  "The listing has been saved.","Das Listing wurde gespeichert."
@@ -156,32 +153,32 @@
156
  "Listed listings cannot be deleted. Stop the listing first.","Aktive Listings können nicht gelöscht werden. Stoppen Sie die Listings zuerst."
157
  "Listing deleted","Listing entfernt"
158
  "%d products removed from listing","%d Produkte vom Listing entfernt."
159
- "%d products are listed and could not be removed","%d Produkte sind aktiv gelistet und können nicht entfernt werden."
160
- "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","Der API Token und die Konfiguration sind nicht fertig eingerichtet, diese Aktion ist nicht erlaubt. Bitte prüfen Sie, dass der Token aktiv ist und die Gültigkeit nicht ausläuft."
161
- "A similar job is already running. This job won\'t be executed.","Es läuft bereits ein Vorgang. Ihre Aktion wird nicht ausgeführt."
162
- "It\'s s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Es ist nicht möglich, diese Aktion durchzuführen. Sie müssen den API Token zunächst authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozess durchzurführen."
163
- "An error occurred while starting this job. Please check your log file.","Ein Fehler trat auf beim Start des Vorgangs. Bitte schauen Sie in den Fehlerlog."
164
  "The job to check your products listing will start in few minutes. You can check the progression below.","Der Vorgang um Ihre Produktlistings zu überprüfen wird in wenigen Minuten starten. Sie können den Fortschritt unten einsehen."
165
- "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","Wenn erfolgreich beendet, werden Ihre Produkte automatisch aktiv gelistet. Falls Fehler auftreten, müssen Sie entscheiden, ob das Listing fortgesetzt oder überprüft werden soll."
166
  "There is no product ready to be listed. Please, add products to your products listing ""%s"".","Kein Produkt ist bereit um eingestellt zu werden. Bitte fügen Sie Produkt zu Ihrem Produktlisting ""%s"" hinzu."
167
  "There is no pending product to check.","Kein zu prüfendes Produkt vorhanden"
168
- "The job to list your products listing will start in few minutes.","Der Vorgang zur Einstellung Ihrer Produkte wird in wenigen Minuten beginnen."
169
  "You can check the progression below.","Sie können den Fortschritten unten einsehen."
170
- "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","Es gibt kein Produkt zum reaktivieren. Nur Produkte, die schon mal auf ricardo.ch.ch gelistet wurden, können wieder aktiviert werden für das Produktlisting %d."
171
- "Only listed product items can be stopped.","Nur aktive gelistete Produkte können deaktiviert werden."
172
  "The job to stop to list your products will start in few minutes.","Der Vorgang um Ihre Produkte zu beenden wird in wenigen Minuten beginnen."
173
  "Products listing(s) is/are successfully deleted.","Produktlisting(s) wurde(n) erfolgreich gelöscht."
174
- "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode(","Die folgenden Produktlisting-IDs wurden nicht gelöscht, da Sie immer noch aktiv auf ricardo.ch gelistet sind:"
175
- "An error occurred while trying to delete the products listing(s). Please, check your exception log.","Beim Löschen des/der Produktlisting(s) trat ein Fehler auf. Bitte schauen Sie in Ihre Fehlerlog."
176
  "No products selected.","Keine Produkte gewählt."
177
  "The configuration has been saved successfully.","Die Konfiguration wurde erfolgreich gespeichert."
178
- "An error occurred while saving the configuration. Please, check your log files for more details.","Beim Speichern der Konfiguration trat ein Fehler auf. Bitte schauen Sie in den Fehlerlog für weitere Informationen."
179
- "It\'s just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","Dies ist nur eine Vorschau. Bitte denken Sie daran, dass die Darstellung auf ricardo.ch unterschiedlich sein kann."
180
  "Log(s) is/are successfully deleted.","Log(s) wurde(n) erfolgreich gelöscht."
181
- "An error occurred while trying to delete the listing log(s). Please, check your exception log.","Beim Löschen der Listing-Logs trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
182
- "Job(s) is/are successfully deleted.","Aktion(en) erfolgreich gelöscht."
183
  "The following job IDs have not been deleted because they are still running: %s","Die folgenden Aktions-IDs wurden nicht gelöscht, da Sie immer noch aktiv sind."
184
- "An error occurred while trying to delete the job(s). Please, check your exception log.","Beim Löschen der Aktion(en) trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
185
  "ricardo.ch API Signup","ricardo.ch API Anmeldung"
186
  "API Signup","API Anmeldung"
187
  "ricardo.ch Assistant Portal","ricardo.ch Verkäuferportal"
@@ -189,16 +186,16 @@
189
  "Only Ajax call is allowed here.","Hier ist nur ein Ajax-Aufruf erlaubt."
190
  "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","Der Website Code von ricardo.ch ist nicht korrekt. Die Authorisierung konnte auf Seiten von Magento nicht gespeichert werden."
191
  "Your ricardo.ch account has been authorized to get access to the API.","Ihr ricardo.ch-Konto wurde erfolgreich authorisiert, um Zugang zur API zu erhalten."
192
- "An error occurred while saving the token. Please, check your log files.","Beim Speichern des Tokens trat ein Fehler auf. Bitte schauen Sie in Ihr Fehlerlog."
193
  "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","Die Authorisierung wurde von ricardo.ch zurückgewiesen. Bitte kontaktieren Sie ricardo.ch um den Grund zu erfahren."
194
  "Sign Up to ricardo.ch API","Anmeldung zur ricardo.ch API"
195
  "API Authorization","API Authorisierung"
196
  "No Selection","Keine Auswahl"
197
  "Open ricardo.ch Category Window","Öffne ricardo.ch Kategorien Fenster"
198
  "Add products from selected categories","Füge Produkte von gewählten Kategorien hinzu"
199
- "Only product types supported, enabled and not listed in other products listing will be added.","Nur Produkte, deren Typ unterstützt wird, die aktiv und nicht bereits gelistet sind, werden hinzugefügt."
200
- "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won\'t allow to add products of its subcategories.","Bitte achten Sie darauf, auch die Unterkategorien zu wählen. Wenn Sie nur eine Oberkategorie wählen können Produkte nicht zu deren Unterkategorien hinzugefügt werden."
201
- "Create new listing","Erstelle neues Listing."
202
  "Show Synchronization Jobs","Zeige Synchronisierung-Aufträge"
203
  "General","Allgemeine API Konfiguration"
204
  "Products","Produkte"
@@ -213,7 +210,7 @@
213
  "Status","Status"
214
  "Action","Aktion"
215
  "Preview","Vorschau"
216
- "Configure","Konfiguriere"
217
  "Remove","Löschen"
218
  "Are you sure to remove this/these product(s)?","Sind Sie sicher, dass Sie diese Produkte löschen möchten?"
219
  "Remove from list","Von der Liste löschen"
@@ -222,52 +219,51 @@
222
  "This product has been configured for %s %s","Diese Produkte wurde konfiguriert für %s %s"
223
  "The product has custom options, those will not be added to ricardo.ch!","Das Produkt hat individuelle Optionen, diese werden nicht zu ricardo.ch übertragen."
224
  "ID","ID"
225
- "Add selected product(s)","Fügen Sie gewählte Produkte hinzu"
226
  "Title","Titel"
227
- "Website","Website"
228
  "Language","Sprache"
229
  "Product languages to synchronize to ricardo.ch","Produktsprachen, die mit ricardo.ch synchronisiert werden sollen."
230
- "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch unterstützt zur Zeit nur zwei Sprachen: Deutsch und Französisch. Sie können wählen, in welcher Sprache Sie die Produktinfos übertragen möchten (Titel, Untertitel, Beschreibung, etc)."
231
  "Default language to publish","Standardsprache bei der Veröffentlichung."
232
- "Which language to publish by default to ricardo.ch when the product content is not available in a language?","Welche Sprache soll standarmässig zur Veröffentlichung bei ricardo.ch gewählt werden, wenn Produktinfos in gewüschter Sprache nicht verfügbar sind?"
233
- "Store View for %s","Store View für %s"
234
  "Payment Methods","Zahlungsarten"
235
- "Payment Description German","Zahlungsarten Beschreibung deutsch"
236
- "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Zeichen: %s. Max. 5 000 Zeichen. Information zu den Zahlungsarten für die Kunden. Diese Infos werden zu ricardo.ch nur übertragen, wenn Sie die Zahlart ""Andere"" wählen"
237
  "Payment Description French","Beschreibung Zahlungsarten Französisch"
238
  "Shipping Methods","Versandarten"
239
  "Shipping Price","Versandkosten"
240
  "Free shipping","kostenloser Versand"
241
- "Is Shipping fee cumulative","Sind Versandkosten kumulativ"
242
- "If you select this option, the shipping fee will be calculate for each sold product.","Wenn Sie diese Option wählen, werden die Versandkosten für jedes verkaufte Produkt einzelnd berechnet."
243
- "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","z. B. ein Artikel wird mit der Menge 3 von einem Kunden gekauft und die Versandkosten liegen bei jeweils 15 CHF. Die Versandkosten sind dann insgesamt 45 CHF. Lassen Sie das Feld leer, wenn Sie diese Option nicht wählen möchten."
244
  "Shipping Availability","Verfügbarkeit des Artikels"
245
- "Shipping Description German","Versandbeschreibung deutsch"
246
  "Characters: %s. Max. 5 000 characters","Zeichen: %s. Max. 5 000 Zeichen"
247
- "Shipping Description French","Versandbeschreibung französisch"
248
- "The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed.","Die Standardwährung dieses Stores ist {$storeCurrency}. Nur %s ist als Währung erlaubt. Die Preise werde nicht umgerechnet."
249
  "Category","Kategorie"
250
  "ricardo.ch Category","ricardo.ch Kategorie"
251
- "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Nutze Magento / ricardo.ch Kategorie-Mapping (wenn ein Mapping nicht existiert, wird eine Fehlermeldung ausgegeben, wenn die Synchronisierung zu ricardo.ch vorbereitet wird.)"
252
  "Select ricardo.ch Category","Wähle ricardo.ch Kategorie"
253
  "Select the category","Wähle Kategorie"
254
- "Type of sales","Verkaufstyp"
255
  "Start price","Startpreis"
256
- "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Spanne zwischen Fr. 0.05 und Fr. 1 000 000. Wenn Kreditkarte als Zahlart verfügbar und aktiv, liegt die Spanne zwischen Fr. 0.05 und Fr. 2 999.95."
257
  "Increment","Erhöhtungsschritt"
258
  "Currency","Währung"
259
  "Allow Direct Buy","Erlaube Sofort-Kaufen"
260
  "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Befüllen Sie das Feld ""Sofort-Kaufen"" unten, um den Sofort-Kaufen-Preis zu definieren. <strong>Hinweis</strong>: wenn auf ""Ja"" gestellt, wird die ""individuelle Verfügbarkeit"" auf 1 gestellt."
261
  "Source","Quelle"
262
  "Price Change","Preisspanne"
263
- "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","Für Produkte mit Fixpreis, der Mindestpreis ist Fr. 0.05 und der Maximalpreis ist Fr. 2 999.95 sofern die Zahlungsart Kreditkarte aktiviert ist."
264
- "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","Für Auktions-Artikel ist die minimale Menge Fr. 0.1 und muss größer sein, als der Startpreis."
265
- "If not correctly defined, the minimum and maximum values will be automatically set.","Wenn nicht korrekt definiert, werden die Min- und Max-Werte automatische gesetzt."
266
  "Schedule","Zeitplan"
267
  "Start","Start"
268
  "Starting date must start minimum in one hour and maximum 30 days in the future.","Der Verkauf kann frühestens in einer Stunde, spätestens in 30 Tagen starten."
269
  "Start immediately","Sofort starten"
270
- "Start from","Starte von"
271
  "End","Ende"
272
  "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","Der Verkauf darf frühestens in 24 Stunden, spätestens 10 Tage nach dem Startdatum enden."
273
  "End after %s days","Ende nach %s Tagen"
@@ -282,43 +278,44 @@
282
  "Condition Product Source","Zustand des Produkts"
283
  "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Möchten Sie den Zustand des Produkts über das Produktattribut bestimmen? Falls nicht und Sie hier ""Nein"" eintragen, wird der Standardwert aus dem Produktlisting übernommen."
284
  "Warranty","Garantie"
285
- "Warranty description German","Garantiebeschreibung deutsch"
286
  "Characters %s. Max. 5 000 characters","Zeichen %s. Max. 5 000 Zeichen"
287
- "Warranty description French","Garantiebeschreibung französisch"
288
  "Stock Management","Lagerverwaltung"
289
- "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Spanne 1...999. Wenn Sie die Lagerhaltungs-Option nutzen, wird die Menge der Produkte mit dem Feld ""Menge"" befüllt. Die maximale Menge ist jedoch 999."
290
  "Use product inventory","Nutze Lagerbestand des Produkts"
291
  "Use custom qty","Nutze spezifizierte Menge"
292
- "Customization","Spezifizierung"
293
- "Template","Template"
294
- "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","Um eines zu erstellen, gehen Sie zu Ihrem <a href=""%s"">ricardo.ch Konto</a> in ""Meine Verkäufe""."
295
  "Promotion","Promotion"
296
  "Privilege Space","Promo-Fenster"
297
- "Privilege space on main category page and search results. More information about this feature <a onclick=\window.open('%s');\"">here</a>""","Promo-Fenster auf der Hauptkategorieseite und Suchergebnisse. Mehr Informationen über dieses Feature finden Sie <a onclick=\window.open('%s');\"">hier</a>"""
 
298
  "Home Privilege Space","Promo-Fenster Homepage"
299
  "Privilege space on the homepage. More information about this feature <a onclick=""window.open('%s');"">here</a>","Promo-Fenster auf der Homepage. Mehr Informationen über dieses Feature bekommen Sie <a onclick=""window.open('%s');"">hier</a>"
300
  "Home Space","Promo-Fenster Homepage"
301
  "These options will not be activated for products having no picture.","Diese Option wird nicht aktiviert für Produkte ohne Bilder."
302
  "Until sold","Bis ausverkauft"
303
- "Listed items cannot be modified. Stop the listing first to make changes.","Gelistete Produkte können nicht modifiziert werden. Beenden Sie zunächst das Listing um Änderungen vornehmen zu können."
304
  "Back to the list ""%s""","Zurück zur Liste ""%s"""
305
  "Configure product '%s'","Konfiguriere Produkt '%s'"
306
  "Configure all %s selected products","Konfiguriere alle %s gewählten Produkte"
307
  "No ricardo.ch category found","Keine ricardo.ch Kategorie gefunden"
308
  "Give a name","Geben Sie einen Namen an"
309
  "Select a website","Wählen Sie eine Website"
310
- "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","Die Website(s) müssen für diese extension konfiguriert und aktiviert sein. Wenn dieses Feld leer ist oder etwas fehlt, <a href=""%s"">konfigurieren</a> Sie bitte die Extension."
311
  "Cancel","Abbrechen"
312
- "Listed products:","Gelistete Produkte"
313
- "Not listed products:","Nicht gelistete Produkte"
314
  "Add Product(s) from category","Füge Produkt(e) von der Kategorie hinzu"
315
  "Add Product(s)","Füge Produkt(e) hinzu"
316
- "Stop","Stop"
317
- "Remove article listed on ricardo.ch","Entferne gelistete Artikel auf ricardo.ch"
318
- "Check & List","Prüfe & liste"
319
- "Check & list only pending & error items","Prüfe & liste nur wartende und fehlerhafte Produkte"
320
  "List","Einstellen"
321
- "List only ""Ready to list"" items","Nur Produkte einstellen, die den Status ""Fertig zur Listung"" haben"
322
  "Edit Products Listing '%s'","Bearbeite Produktlisting '%s'"
323
  "New Products Listing","Neues Produktlisting"
324
  "Websites","Websites"
@@ -329,7 +326,7 @@
329
  "View Logs","Siehe Logs"
330
  "Change status","Ändere Status"
331
  "Delete","Löschen"
332
- "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed""","Sind Sie sicher, dass Sie die Produktlisting(s) löschen möchten? Beachten Sie, das nur aktive Listen gelöscht werden können."
333
  "Products Listing Log ""%s""","Produktlistings Log ""%s"""
334
  "Edit ""%s""","Bearbeite ""%s"""
335
  "Job ID","Job ID"
@@ -342,7 +339,7 @@
342
  "Job Type","Job Typ"
343
  "Job Message","Job Nachricht"
344
  "Current Progress","Aktueller Fortschritt"
345
- "Started at","Begonnen am"
346
  "Ended at","Beendet am"
347
  "Are you sure that you want to delete this/these job(s)?","Sind Sie sicher, dass Sie diese Vorgänge löschen möchten?"
348
  "Show Products Listing","Zeige Produktlisting"
@@ -353,18 +350,18 @@
353
  "You may also access to the %s content of this page</a> in a new window.","Sie können den %s Inhalt dieser Seite auch </a> in einem neuen Fenster bearbeiten."
354
  "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Ihre ricardo.ch-API-Token-Daten laufen in %s Tagen für diese Webseite ""%s"" ab."
355
  "No ricardo.ch API Authorization have been found for the website ""%s"".","Keine ricardo.ch-API-Authorisierung wurde für diese Website ""%s"" gefunden."
356
- "You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," Sie müssen Ihr Konto authorisieren, um Zugang zur ricardo.ch-API zu bekommen. Sie können das mittels der <a href=""%s"">ricardo.ch Authorisierungsseite</a> tun. Wenn Sie das nicht tun, werden alle Aufrufe von und zu ricardo.ch blockiert."
357
  "To hide this message, you have to <a href=""%s"">disable the extension</a>.","Um diese Nachricht zu verbergen, müssen Sie die Extension <a href=""%s"">deaktivieren</a>."
358
  "The Official ricardo.ch Extension has been installed.","Die offizielle ricardo.ch Extension wurde installiert."
359
  "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Bitte klicken Sie <a href=""%s"">hier</a> um den Zugang zur ricardo.ch API zu konfigurieren."
360
  "Latest message for the selected job","Letzte Nachricht für den gewählten Vorgang"
361
- "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Bearbeite</a> deine Produktlistings, wenn notwendig"
362
  "No message found.","Keine Nachricht gefunden."
363
- "Confirm","Bestätige"
364
  "More Views","Mehr Ansichten"
365
  "%s days 0:0:0","%s Tage 0:0:0"
366
  "Starting price","Startpreis"
367
- "Place a bit","Platziere ein Gebot"
368
  "Quantity","Anzahl"
369
  "of %s","von %s"
370
  "Details","Details"
@@ -382,29 +379,25 @@
382
  "Shipping Price:","Versandkosten:"
383
  "Shipping Availability:","Versandverfügbarkeit:"
384
  "Shipping Description (CH):","Versandkosten Beschreibung (CH):"
385
- "You must select a ricardo.ch Category if you set this option","Sie müssen eine ricardo.ch-Kategorie wählen, um diese Option zu wählen"
386
  "The task will start few minutes","Der Vorgang wird in ein paar Minuten starten"
387
  "No progress","Kein Fortschritt"
388
  "The product list has been stopped.","Die Produktliste wurde beendet."
389
-
390
  "ricardo.ch Lifetime Sales","ricardo.ch Gesamtumsatz"
391
  "Turnover per month","Umsatz pro Monat"
392
  "Best Sellers","Meistverkaufte Produkte"
393
- "Qty sold", "Menge Verkauft"
394
- "Product Name","Produktname"
395
  "SKU","SKU"
396
  "Price","Preis"
397
  "Your ricardo.ch API Token","Ihre ricardo.ch API Token"
398
-
399
- "PREMIUMCATEGORYBRONZE"," Klein"
400
- "PREMIUMCATEGORYSILVER"," "Medium"
401
- "PREMIUMCATEGORYGOLD"," "Groß"
402
-
403
  "TYPE_BANK_TRANSFER","Banküberweisung"
404
- "TYPE_CASH","Bar"
405
  "TYPE_CREDIT_CARD","Kreditkarte via ricardo.ch"
406
- "TYPE_OTHER", "Andere Zahlungsmethoden"
407
-
408
  "UNKNOWNPROPERTY","Unbekannter Besitzer"
409
  "CUSTOMERNOTARTICLEOWNER","Der Kunde darf das Produkt nicht bearbeiten, da er nicht der Besitzer ist."
410
  "CHECKPASSWORDWRONGPASSWORD","Das Passwort ist falsch."
@@ -416,7 +409,7 @@
416
  "TOKENEXPIRED","Token ausgelaufen für API "
417
  "ANONYMOUSNOTALLOWED","Anonymer Aufruf ist nicht erlaubt"
418
  "TEMPORAYCREDENTIALEXPIRED","temporärer Zugang abgelaufen für API"
419
- "TEMPORAYCREDENTIALUNVALIDATED","temporärer Zugang für API nicht valide"
420
  "SESSIONEXPIRED","Session abgelaufen"
421
  "UPDATEPASSWORDPOLICYINVALID","CustomerUpdatePassword wird mit einem Passwort mit invaliden Bedingungen genutzt. Es müssen mindestens 8 Zeichen sein, davon mindestens ein Großbuchstabe und ein Nicht-Alphanumerisches Zeichen."
422
  "AFTOKENERROR","Anti Forgery token error "
@@ -427,7 +420,6 @@
427
  "ACCOUNTCLOSED","Das Kundenkonto wurde geschlossen."
428
  "METHODNOTALLOWED","Die Partnerschaft stimmt nicht mit der gewählten Methode überein."
429
  "TOKEN_AUTHORIZATION","Die Authorisierung muss nochmal durchgeführt werden"
430
-
431
  "CLOSEAUCTIONFAILED","Auktion konnte nicht geschlossen werden"
432
  "CLOSECLASSIFIEDFAILED","Ein Produkt konnte nicht klassifiziert werden"
433
  "DELETEPLANNEDFAILED","Ein Produkt konnte nicht gelöscht werden"
@@ -438,19 +430,18 @@
438
  "CUSTOMERNOTFOUND","Kunde nicht gefunden"
439
  "EMPTYIPADDRESS","Die IP Adresse ist nicht definiert"
440
  "TECHNICALPROBLEM","Technischer Fehler"
441
- "ARTICLESAMOUNTLIMIT","Limit für die Menge pro Übertragung liegt bei 100 "
442
  "LISTOFARTICLESEMPTY","Liste der Produkte ist leer"
443
  "UNKNOWNCATEGORYNAME","Kategoriename ist nicht bekannt"
444
-
445
- "EMPTYCOUNTRYID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
446
- "EMPTYPARTNERID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
447
- "EMPTYCATEGORY","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
448
- "EMPTYRELISINFOS","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
449
  "EMPTYCUSTOMER","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
450
- "UNKNOWNPARTNERID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
451
- "UNKONWNCATEGORYID","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
452
  "INVALIDDURATION","Die angefragte Dauer ist nicht möglich."
453
- "RELISTCOUNTEXCEEDED","Bitte beachten Sie, dass Sie Ihre Artikel höchstens 9 Mal reaktivieren können. "
454
  "STARTPRICETOOHIGH","Bitte setzen Sie einen Startpreis, der gleich oder tiefer als CHF 10 000 000 000 ist."
455
  "STARTPRICETOOLOW","Bitte setzen Sie einen Startpreis, der gleich oder höher als CHF 0.05 ist."
456
  "INVALIDARTICLETYPEFORCATEGORY","Bitte beachten Sie, dass diese Kategorie-Änderung nicht erlaubt ist."
@@ -458,7 +449,7 @@
458
  "CATEGORYDEDICATEDTOUSERS","Leider können Sie in dieser Kategorie keine Artikel einstellen. Bitte wählen Sie eine andere Kategorie aus oder kontaktieren Sie unseren Kundendienst."
459
  "INVALIDTEMPLATEID","Bitte überprüfen Sie ob die ausgewählte Vorlage in Ihrem My Ricardo vorhanden ist."
460
  "EMPTYTITLE","Bitte tragen Sie einen Titel in das entsprechende Feld ein."
461
- "EMPTYDESCRIPTION","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
462
  "EMPTYSUBTITLE","Bitte tragen Sie einen Untertitel in der zweiten Sprache ein."
463
  "TOOLONGTITLE","Bitte beachten Sie, dass der Titel nicht mehr als 40 Zeichen enthalten darf."
464
  "TOOLONGDESCRIPTION","Bitte beachten Sie, dass Ihre Artikel-Beschreibung nicht mehr als 65'000 Zeichen enthalten darf."
@@ -477,21 +468,21 @@
477
  "NODELIVERYCONDITION","Bitte wählen Sie eine Versandart aus. "
478
  "DELIVERYCOSTTOOHIGH","Die von Ihnen definierte Versandkosten sind zu hoch. Bitte wählen Sie einen Betrag der kleiner ist als CHF 210'000."
479
  "MANUALINCREMENTNOTALLOWED","Der Erhöhungschritt kann nicht manuell definiert werden."
480
- "PLANNEDSCHEDULETOOLOW","Die geplante Startzeit, darf nicht näher als 30 Minuten von der aktuellen Zeit sein"
481
  "PLANNEDSCHEDULETOOHIGH","Die von Ihnen definierte ""Startzeit"" für das Einstellen des Artikels liegt zuweit in der Zukunft. Bitte planen Sie max. 30 Tage im Voraus. "
482
- "REFERENCETOOLONG","Die von Ihnen gesetzte Referenznummer ist zu lang. Bitte wählen Sie eine Referenznummer mit maximal 40 Zeichen."
483
- "INVALIDQUANTITYFORAUCTIONBUYNOW","Bitte beachten Sie, dass die Option "Sofort-Kaufen" nur bei Angeboten mit der Stückzahl 1 gewählt werden kann."
484
  "BUYNOWLOWERTHANSTARTPRICE","Bitte setzen Sie einen Sofort-Kaufen-Preis, der höher als Ihr Startpreis ist."
485
  "RICARDOPAYNOCARSANDBIKES","Über ricardo.ch können keine Autos oder Fahrräder verkauft werden"
486
- "RICARDOPAYWRONGPAYMENTCONDITIONS","Die gewählte Bezahlmethode kann nicht mit der Kreditkartenzahlung kombiniert werden. Bitte wählen Sie eine andere Methode aus."
487
  "RICARDOPAYPRICETOOHIGH","Der Preis ist zu hoch."
488
  "RICARDOPAYWALLETBLOCKED","Das ricardo.ch Pay-Wallet wurde blockiert."
489
  "MAXPICTURESIZEREACHED","Bitte beachten Sie, dass die gesamte Grösse für das Hochladen Ihrer Bilder auf 20 MB beschränkt ist. "
490
  "ERRORRESIZINGPICTURE","Während der Verarbeitung Ihrer Bilder ist ein Fehler aufgetreten. Wir bitten Sie um Entschuldigung."
491
- "MAXPICTURESCOUNTREACHED","Bitte beachten Sie, dass die maximale Anzahl Fotos pro Artikel auf 10 beschränkt ist. Weitere Bilder können deshalb nicht hinzugefügt werden."
492
  "INVALIDPROMOTION","Ungültige Promotion."
493
  "INVALIDPROMOTIONCOMBINATION","Bitte beachten Sie, dass die mehrfache Auswahl von Anzeigepaketen nicht möglich ist. "
494
- "NOTCLOSED","Die Bezahloption „Kreditkartenzahlung“ steht für Autozubehör nicht zur Verfügung. Deaktivieren Sie bitte diese Option."
495
  "EMPTYARTICLEINFOS","Bitte wählen Sie eine Option, um den Zustand Ihres Artikels zu definieren."
496
  "EMPTYDELIVERY","Bitte wählen Sie eine Versandart aus."
497
  "EMPTYPROMOTIONS","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
@@ -563,21 +554,20 @@
563
  "CANTUPDATEPICTUREONARTICLEWITHBID","Das Bild kann bei einem Angebot das bereits Gebote erhalten hat nicht aktualisiert werden."
564
  "HTMLTAGSNOTALLOWED","Bitte beachten Sie, dass HTML-Tags in diesem Beschreibungsfeld nicht unterstützt werden"
565
  "WRONGPAYMENTCONDITIONS","Falsche Zahlungsarten"
566
- "EMPTYPAYMENTCONDITIONIDS","Leere Zahlungsarten-Ids"
567
- "NODETAILS","Keine Details gegeben."
568
- "ARTICLEALREADYHASCARDPAYMENT","Produkt hat bereits eine Zahlungs-Id."
569
  "ERRORINSERTINGCARDPAYMENT","Fehler bei der Eingabe der Kartenzahlung."
570
  "ARTICLEDOESNOTHAVECARDPAYMENT","Produkt hat keine Kartenzahlung."
571
  "ERRORREMOVINGCARDPAYMENT","Fehler beim Entfernen der Kartenzahlung"
572
- "RICARDOPAYNOTACTIVATED","ricardo.ch Pay ist nicht aktiviert."
573
- "EMPTYPAYMENTMETHODSIDS","Leere Zahlungsarten-Ids"
574
- "EMPTYARTICLEID","Leere Produkt-Id"
575
  "INVALIDCARDCOMBINATIONWITHDELIVERYCONDITION","Ungültige Karte in Kombination mit den Versandkonditionen"
576
  "NUMBEROFARTICLELIMITED","Anzahl der Produkte ist limitiert."
577
  "PAYMENTMETHODNEEDALTERNATEONE","Alternative Zahlungsart notwendig."
578
- "WRONGPAYMENTMETHODS","falsche Zahlungsart"
579
- "CUMULATIVESHIPPINGNOTALLOWED","kumulative Versandkosten nicht erlaubt."
580
-
581
  "MAXPICTURESCOUNTREACHED","maximale Bilderanzahl erreicht"
582
  "MAXPICTURESIZEREACHED","maximale Bildgröße erreicht"
583
  "ERRORRESIZINGPICTURE","Fehler bei der Grössenänderung der Bilder"
@@ -587,7 +577,6 @@
587
  "INVALIDPICTUREINDEX","ungültiger Bildindex"
588
  "MAXLOGOPICTURESIZEREACHED","maximale Logogröße erreicht"
589
  "ERRORRESIZINGLOGOPICTURE","Fehler bei der Größenänderung des Logos"
590
-
591
  "NOTALLOWEDTOSELL","Produkt nicht erlaubt zu verkaufen"
592
  "BILLINGERROR","BILLINGERROR"
593
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
@@ -652,13 +641,38 @@
652
  "UNABLETOINSERT","UNABLETOINSERT"
653
  "CREDITLIMITEXCEEDED","Kreditlimit erreicht. Bitte, kontaktieren Sie ricardo.ch"
654
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
655
-
656
  "No Options because API is not configured","No Options because API is not configured"
657
  "No Options because API has a problem","No Options because API has a problem"
658
- "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.", "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
659
- "Security error occurred with the ricardo API. Please, check your log files.", "Security error occurred with the ricardo API. Please, check your log files."
660
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
661
- "Product Price of %s CHF is incorrect. Minimum price is %s.","Produktpreis von %s CHF ist falsch. Minimum Preis ist %s."
662
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
663
  "Following error(s) appeared:","Following error(s) appeared:"
664
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "Dashboard","Dashboard"
3
  "Products Listing","Produktübersicht"
4
  "Logs","Logs"
5
+ "ricardoAssistant","ricardoAssistent"
6
  "Configuration","Konfiguration"
7
  "Ricento by Diglin GmbH","Ricento von der Diglin GmbH"
8
  "Log","Log"
9
+ "ricardo.ch Payment Methods","ricardo.ch Zahlungsarten"
10
  "ricardo.ch Shipping","ricardo.ch Versandarten"
11
  "Admin Email Notification","Admin Email Benachrichtigung"
12
  "Private message","Private Nachricht"
13
+ "Order Configuration","Bestellungs Konfiguration"
14
  "Merge Order","Bestellungen zusammenfassen"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","Wenn ein Kunde mehrere Produkte innerhalb von 30 Minuten bestellt, möchten Sie, dass die Bestellungen zusammengefasst werden?"
16
  "Shipping Calculation","Versandkosten-Kalkulation"
17
+ "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","Sie können entscheiden, wie die Versandkosten berechnet werden, wenn eine Bestellung zusammengefasst wurde.<br> ""Höchster Preis"": Diese Methode findet das Produkt mit den höchsten Versandkosten und nutzt diesen Versandkosten für die Gesamtsumme.<br>""Kumulativ"": diese Methode addiert die Versandkosten der einzelnen Produkte."
 
 
18
  "Send Account Creation Confirmation Email","Sende Willkommensbestätigung per Mail"
19
+ "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Möchten Sie ein Bestätigungsmail von Magento senden, wenn ein Kunde ein Konto erstellt hat?"
20
  "Send Email for new order","Sende Email beim Eingang einer neuen Bestellung"
21
+ "Do you want to send the newly order created by email to a customer when the order is imported from ricardo?","Möchten Sie eine Bestellungbestätigungsmail versenden, wenn eine neue Bestellung importiert ist?"
22
  "API Token Configuration","API Token Konfiguration"
23
  "General API Config","Allgemeine API Konfiguration"
24
  "ricardo.ch Extension enabled","ricardo.ch Extension aktiviert"
25
  "Development Mode","Entwicklermodus"
26
  "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","Wenn Sie diese Funktion aktivieren, werden alle API-Anfragen an die ricardo.ch BETA Umgebubg verschickt. Stellen Sie sicher, dass Sie die dafür passenden API-Keys und Passwörter eingetragen haben."
27
  "Debug","Debug"
28
+ "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","In diesem Modus werden alle Anfragen an die ricardo.ch-API in die Datei var/log/ricento.log geschrieben. Aktivieren Sie diesen Modus, wenn Sie Probleme haben und schicken Sie uns diese Datei zu. Damit können wir Ihnen helfen. Die Passwörter werden anonymisiert. Achtung: Die Log Datei kann sehr schnell wachsen."
29
  "German API Token","Deutscher API Token"
30
+ "PROD German Partner Key","PROD Deutscher Partnership Key"
31
+ "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Der Partnership Key hat das folgende Format: '0F12345-1234-1234-1234-1234567890'. Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
32
+ "PROD German Partner Password","PROD Deutsches Partnership Passwort"
33
  "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Sie müssen sich für die ricardo.ch API anmelden, um diesen Schlüssel zu bekommen. Klicken Sie dazu auf den Button oben auf der Seite."
34
+ "DEV German Partner Key","Entwicklermodus deutscher Partnership Key"
35
+ "DEV German Partner Password","Entwicklermodus deutsches Partnership Passwort"
36
  "French API Token","Französischer API Token"
37
+ "PROD French Partner Key","PROD Französischer Partnership Key"
38
+ "PROD French Partner Password","PROD Französischer Partnership Passwort"
39
+ "DEV French Partner Key","Entwicklermodus französischer Partnership Key"
40
+ "DEV French Partner Password","Entwicklermodus französischer Partnership Passwort"
41
+ "Cleanup Synchronization Jobs Log","Log für Synchronisation-Jobs löschen"
42
  "Enabled","Aktiviert"
43
+ "Keep for X days","Aufbewahren für x Tage"
44
+ "Cleanup Listings Log","Log für Produktlisten leeren"
45
  "ricardo.ch API Payment Methods","ricardo.ch API Zahlungsarten"
46
  "Bank Transfer Instructions","Instruktionen Bank-Überweisung"
47
  "Accepted Currency","Akzeptierte Währung"
48
+ "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","Lagerbestand auf 1 gesetzt, da die Sofort-Kaufen Option nicht mehr als ein Stück erlaubt."
49
  "Invalid start date.","Ungültiges Startdatum"
50
  "The end date must be in the future.","Das Enddatum muss in der Zukunft liegen."
51
+ "Listed listings cannot be modified. Stop the listing first to make changes.","Aktive Produklisten können nicht verändert werden. Beenden Sie die Produklisten, um Änderungen vornehmen zu können."
52
  "An error occurred while saving the configuration.","Ein Fehler trat beim Speichern der Konfiguration auf."
53
+ "ricardo.ch Service Model doesn't exists.","ricardo.ch Service Model existiert nicht."
54
  "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","ricardo.ch API Daten sind nicht vorhanden. Bitte tragen Sie zunächst die Daten ein."
55
  "API language provided for the Service Manager is not supported.","API Sprache für den Service Manager wird nicht unterstützt."
56
  "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Fehler beim Verbinden mit der ricardo.ch API. Bitte checken Sie Ihre Log Dateien, um eine genauere Fehlerbeschreibung zu erhalten."
59
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
60
  "The product has been sold","Das Produkt wurde verkauft."
61
  "Customer creation failed! ricardo.ch transaction cannot be added.","Kunde konnte nicht angelegt werden. ricardo.ch Bestellung konnte nicht übertragen werden."
62
+ "Order automatically generated by the ricardo.ch Extension.","Bestellung(en) wurde(n) automatisch durch die ricardo.ch Extension erstellt."
63
  "Payment is pending","Bezahlung ausstehend"
64
+ "Payment has been completed on ricardo.ch side","Bezahlung wurde bei ricardo.ch ausgeführt."
65
  "Order canceled on ricardo.ch side","Bezahlung wurd bei ricardo.ch storniert."
66
  "Country Code is not available. Please contact the author of this extension or support.","Ländercode ist nicht verfügbar. Bitte kontaktieren Sie den Autor dieses Moduls für Support."
67
  "Report: %d success, %d warning(s), %d error(s)","Report: %d erfolgreich, %d Warnung(en), %d Fehler"
68
+ "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">click here</a>. Products with an error won't be synchronized, you have to fix the problem first.","Erfolgreich geprüfte Produkte werden eingestellt. Um Produkte mit Warnungen einzustellen, klick Sie bitte <a href=""%s"">hier</a>. Produkte mit Fehlern werden nicht eingestellt, Sie müssen die Fehler zuerst beheben."
69
+ "The product is now live on ricardo.ch","Das Produkt ist nun auf ricardo.ch eingestellt."
70
  "Sorry, the product has not been sold","Sorry, das Produkt wurde nicht verkauft."
71
+ "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","Der Artikel ist bereits eingestellt oder hat bereits eine Artikelnummer bei ricardo.ch."
72
  "The product has been removed from ricardo.ch","Das Produkt wurde bei ricardo.ch entfernt."
73
  "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","Das Produkt wurde nicht bei ricardo.ch entfernt. Wahrscheinlich weil jemand für das Produkt geboten oder es gekauft hat."
74
  "Report: %d success, %d error(s)","Report: %d erfolgreich, %d Fehler"
102
  "Buy now","Sofort-Kaufen"
103
  "Highest Price","Höchster Preis"
104
  "Cumulative","Kumulativ"
105
+ "Pending","Ausstehend"
106
+ "Running","In Verarbeitung"
107
+ "Ready","Bereit"
108
+ "Completed","Abgeschlossen"
109
  "Products Check Job","Produkt-Check Job"
110
+ "List Job","Einstellen-Job"
111
  "Stop List Job","Stop Einstellen Job"
112
  "Sync Order Job","Sync Bestellung Job"
113
  "Relist Job","Reaktivierung Job"
124
  "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Titel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
125
  "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Untertitel wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
126
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Produkt-Beschreibung wird nach %s Zeichen abgeschnitten, wenn auf ricardo.ch für Store ""%s"" veröffentlicht."
127
+ "Custom Options are not supported. Those won't be synchronized into ricardo.ch.","Individuelle Optionen werden nicht unterstützt. Sie werden nicht zu ricardo.ch übertragen und ignoriert."
128
+ "The product or its associated products is/are not in stock or doesn't have enough quantity in stock.","Das Hauptprodukt oder seine verknüpften Produkte sind nicht an Lager oder der Lagerbestand ist nicht hoch genug."
129
+ "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","Sie müssen eine ricardo.ch-Kategorie für dieses Produkt wählen. Prüfen Sie, ob Sie das Produkt auf Produktliste-Ebene oder Magento-Kategorie-Ebene gesetzt haben."
130
+ "Payment and/or Shipping combination are not correct.","Zahlungsarten- und/oder Versand-Kombination sind nicht korrekt."
 
131
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","Sie können keinen Startpreis für eine Auktion von %2$s festlegen, wenn Sie ""Sofort-Kaufen"" mit dem Produktpreis von %1$s anbieten."
132
+ "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Aus Sicherheitsgründen ist eine Kreditkarten-Zahlung bei Beträgen von CHF %s.- nicht möglich für ""Sofort-Kaufen"". Bitte wählen Sie eine andere Zahlungsart oder passen Sie den Preis an. Der Preis muss zwischen %s und %s liegen."
133
+ "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","Das Enddatum ist zu früh oder zu spät. Erlaubte Zeitspanne: mindestens %s Tage maximal %s Tage"
134
+ "You cannot use the privilege spaces as you do not have any pictures for this product.","Sie können keine Promotionen nutzen, da Sie keine Bilder für dieses Produkt hinterlegt haben."
135
  "This increment value is not possible for this start price.","Der angegebene Erhöhungsschritt ist nicht möglich für diesen Startpreis."
136
  "Only the following combinations are possible:","Nur die folgenden Kombinationen sind möglich:"
137
+ "Start price is between","Startpreis"
138
+ "Increment must be between","Erhöhungsschritt"
139
+ "This payment method combination is not possible.","Diese Zahlungsarten-Kombination ist nicht möglich."
140
  "The following combinations are possible:","Die folgenden Kombinationen sind möglich:"
141
+ "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","Es ist nicht möglich, die Versandmethode ""Andere"" mit der Zahlungsart ""Kreditkarte"" zu kombinieren."
142
+ "No category will be displayed, the products listing doesn't exists. Please, close the window.","Keine Kategorie wird angezeigt, das Produktlisting existiert nicht. Bitte schließen Sie das Fenster."
143
  "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","Sie dürfen dieses Produktlisting nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. Bitte schließen Sie das Fenster."
144
+ "Product(s) from the selected categories cannot be saved. The products listing doesn't exists.","Produkte von den gewählten Kategorien können nicht gespeichert werden. Die Produktliste existiert nicht."
145
+ "You are not allowed to save the products listing, so you cannot add products from a category.","Sie dürfen diese Produktliste nicht speichern. Es können keine Produkte von einer Kategorie hinzufügen. "
146
+ "%d product(s) added to the listing","%d Produkte zur Produkliste hinzugefügt."
147
  "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Fehler traten auf während des Speicherns der gewählten Kategorien. Bitte prüfen Sie den Fehlerlog."
148
+ "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Die Aktion, die Sie durchführen wollen, ist nicht möglich. Sie müssen zunächst den API Token authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozeß durchzuführen."
149
  "Listing name and website must be specified.","Listingname und Webseite müssen definiert werden."
150
  "We have detected and set for you the language configuration. Please, review it before to go further.","Wir haben die Sprache für Sie vorausgewählt. Bitte prüfen Sie, ob die Wahl richtig ist, bevor Sie fortfahren."
151
  "The listing has been saved.","Das Listing wurde gespeichert."
153
  "Listed listings cannot be deleted. Stop the listing first.","Aktive Listings können nicht gelöscht werden. Stoppen Sie die Listings zuerst."
154
  "Listing deleted","Listing entfernt"
155
  "%d products removed from listing","%d Produkte vom Listing entfernt."
156
+ "%d products are listed and could not be removed","%d Produkte sind eingestellt und können nicht entfernt werden."
157
+ "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","Der API Token und die Konfiguration sind nicht bereit für diese Aktion. Bitte prüfen Sie, dass der Token aktiv ist und die Gültigkeit nicht abläuft."
158
+ "A similar job is already running. This job won't be executed.","Es läuft bereits ein Vorgang. Ihre Aktion wird nicht ausgeführt."
159
+ "It's s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Es ist nicht möglich, diese Aktion durchzuführen. Sie müssen den API Token zunächst authorisieren. Bitte gehen Sie zur <a href=""%s"">ricardo.ch Authorisierungsseite</a> um den Authorisierungsprozess durchzuführen."
160
+ "An error occurred while starting this job. Please check your log file.","Ein Fehler trat auf beim Start des Vorgangs. Bitte prüfen Sie den Fehlerlog."
161
  "The job to check your products listing will start in few minutes. You can check the progression below.","Der Vorgang um Ihre Produktlistings zu überprüfen wird in wenigen Minuten starten. Sie können den Fortschritt unten einsehen."
162
+ "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","Wenn erfolgreich beendet, werden Ihre Produkte automatisch eingestellt. Falls Fehler auftreten, müssen Sie entscheiden, ob das Einstellen fortgesetzt oder überprüft werden soll."
163
  "There is no product ready to be listed. Please, add products to your products listing ""%s"".","Kein Produkt ist bereit um eingestellt zu werden. Bitte fügen Sie Produkt zu Ihrem Produktlisting ""%s"" hinzu."
164
  "There is no pending product to check.","Kein zu prüfendes Produkt vorhanden"
165
+ "The job to list your products listing will start in few minutes.","Der Vorgang zum Einstellen Ihrer Produkte wird in wenigen Minuten beginnen."
166
  "You can check the progression below.","Sie können den Fortschritten unten einsehen."
167
+ "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","Es gibt kein Produkt zum reaktivieren. Nur Produkte, die schon mal auf ricardo.ch.ch eingestellt wurden, können wieder aktiviert werden für das Produktlisting %d."
168
+ "Only listed product items can be stopped.","Nur eingestellte Produkte können deaktiviert werden."
169
  "The job to stop to list your products will start in few minutes.","Der Vorgang um Ihre Produkte zu beenden wird in wenigen Minuten beginnen."
170
  "Products listing(s) is/are successfully deleted.","Produktlisting(s) wurde(n) erfolgreich gelöscht."
171
+ "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s","Die folgenden Produktlisting-IDs wurden nicht gelöscht, da Sie immer noch aktiv auf ricardo.ch eingestellt sind:"
172
+ "An error occurred while trying to delete the products listing(s). Please, check your exception log.","Beim Löschen des/der Produktlisting(s) trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
173
  "No products selected.","Keine Produkte gewählt."
174
  "The configuration has been saved successfully.","Die Konfiguration wurde erfolgreich gespeichert."
175
+ "An error occurred while saving the configuration. Please, check your log files for more details.","Beim Speichern der Konfiguration trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog für weitere Informationen."
176
+ "It's just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","Dies ist nur eine Vorschau. Bitte denken Sie daran, dass die Darstellung auf ricardo.ch abweichen kann."
177
  "Log(s) is/are successfully deleted.","Log(s) wurde(n) erfolgreich gelöscht."
178
+ "An error occurred while trying to delete the listing log(s). Please, check your exception log.","Beim Löschen der Listing-Logs trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
179
+ "Job(s) is/are successfully deleted.","Job erfolgreich gelöscht."
180
  "The following job IDs have not been deleted because they are still running: %s","Die folgenden Aktions-IDs wurden nicht gelöscht, da Sie immer noch aktiv sind."
181
+ "An error occurred while trying to delete the job(s). Please, check your exception log.","Beim Löschen der Aktion(en) trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
182
  "ricardo.ch API Signup","ricardo.ch API Anmeldung"
183
  "API Signup","API Anmeldung"
184
  "ricardo.ch Assistant Portal","ricardo.ch Verkäuferportal"
186
  "Only Ajax call is allowed here.","Hier ist nur ein Ajax-Aufruf erlaubt."
187
  "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","Der Website Code von ricardo.ch ist nicht korrekt. Die Authorisierung konnte auf Seiten von Magento nicht gespeichert werden."
188
  "Your ricardo.ch account has been authorized to get access to the API.","Ihr ricardo.ch-Konto wurde erfolgreich authorisiert, um Zugang zur API zu erhalten."
189
+ "An error occurred while saving the token. Please, check your log files.","Beim Speichern des Tokens trat ein Fehler auf. Bitte prüfen Sie den Fehlerlog."
190
  "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","Die Authorisierung wurde von ricardo.ch zurückgewiesen. Bitte kontaktieren Sie ricardo.ch um den Grund zu erfahren."
191
  "Sign Up to ricardo.ch API","Anmeldung zur ricardo.ch API"
192
  "API Authorization","API Authorisierung"
193
  "No Selection","Keine Auswahl"
194
  "Open ricardo.ch Category Window","Öffne ricardo.ch Kategorien Fenster"
195
  "Add products from selected categories","Füge Produkte von gewählten Kategorien hinzu"
196
+ "Only product types supported, enabled and not listed in other products listing will be added.","Nur Produkte, deren Typ unterstützt wird, die aktiv und nicht bereits eingestellt sind, werden hinzugefügt."
197
+ "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won't allow to add products of its subcategories.","Bitte achten Sie darauf, auch die Unterkategorien zu wählen. Wenn Sie nur eine Oberkategorie wählen können Produkte nicht zu deren Unterkategorien hinzugefügt werden."
198
+ "Create new listing","Neue Prouduktliste erstellen"
199
  "Show Synchronization Jobs","Zeige Synchronisierung-Aufträge"
200
  "General","Allgemeine API Konfiguration"
201
  "Products","Produkte"
210
  "Status","Status"
211
  "Action","Aktion"
212
  "Preview","Vorschau"
213
+ "Configure","Konfigurieren"
214
  "Remove","Löschen"
215
  "Are you sure to remove this/these product(s)?","Sind Sie sicher, dass Sie diese Produkte löschen möchten?"
216
  "Remove from list","Von der Liste löschen"
219
  "This product has been configured for %s %s","Diese Produkte wurde konfiguriert für %s %s"
220
  "The product has custom options, those will not be added to ricardo.ch!","Das Produkt hat individuelle Optionen, diese werden nicht zu ricardo.ch übertragen."
221
  "ID","ID"
222
+ "Add selected product(s)","Fügen Sie die gewählten Produkte hinzu"
223
  "Title","Titel"
224
+ "Website","Webseite"
225
  "Language","Sprache"
226
  "Product languages to synchronize to ricardo.ch","Produktsprachen, die mit ricardo.ch synchronisiert werden sollen."
227
+ "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch unterstützt zur Zeit nur zwei Sprachen: Deutsch und Französisch. Sie können wählen, in welcher Sprache Sie die Produktinformationen übertragen möchten (Titel, Untertitel, Beschreibung, etc)."
228
  "Default language to publish","Standardsprache bei der Veröffentlichung."
229
+ "Which language to publish by default to ricardo.ch when the product content is not available in a language?","Welche Sprache soll standarmässig zur Veröffentlichung bei ricardo.ch gewählt werden, wenn Produktinformationen in gewüschter Sprache nicht verfügbar sind?"
230
+ "Store View for %s","Shopansicht für %s"
231
  "Payment Methods","Zahlungsarten"
232
+ "Payment Description German","Beschreibung Zahlungsarten Deutsch"
233
+ "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Zeichen: %s. Max. 5 000 Zeichen. Beschreibung der Zahlungsarten für Kunden. Diese Infos werden zu ricardo.ch nur übertragen, wenn Sie die Zahlungsart ""Andere"" wählen."
234
  "Payment Description French","Beschreibung Zahlungsarten Französisch"
235
  "Shipping Methods","Versandarten"
236
  "Shipping Price","Versandkosten"
237
  "Free shipping","kostenloser Versand"
238
+ "Is Shipping fee cumulative","Versandkosten einzeln verrechnen"
239
+ "If you select this option, the shipping fee will be calculate for each sold product.","Wenn Sie diese Option wählen, werden die Versandkosten für jedes verkaufte Produkt einzeln berechnet."
240
+ "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","z.B. Ein Kunde kauft 3 Stück eines Artikels und die Versandkosten liegen bei jeweils 15 CHF. Die Versandkosten sind dann insgesamt 45 CHF. Lassen Sie das Feld leer, wenn Sie diese Option nicht wählen möchten."
241
  "Shipping Availability","Verfügbarkeit des Artikels"
242
+ "Shipping Description German","Versandbeschreibung Deutsch"
243
  "Characters: %s. Max. 5 000 characters","Zeichen: %s. Max. 5 000 Zeichen"
244
+ "Shipping Description French","Versandbeschreibung Französisch"
 
245
  "Category","Kategorie"
246
  "ricardo.ch Category","ricardo.ch Kategorie"
247
+ "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Nutze Magento / ricardo.ch Kategorie-Mapping (wenn ein Mapping fehlt, wird eine Fehlermeldung ausgegeben, während die Synchronisierung zu ricardo.ch vorbereitet wird.)"
248
  "Select ricardo.ch Category","Wähle ricardo.ch Kategorie"
249
  "Select the category","Wähle Kategorie"
250
+ "Type of sales","Angebotsformat"
251
  "Start price","Startpreis"
252
+ "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Spanne von Fr. 0.05 bis Fr. 1 000 000. Wenn Kreditkarte als Zahlungsart verfügbar und aktiv, liegt die Spanne zwischen Fr. 0.05 und Fr. 2 999.95."
253
  "Increment","Erhöhtungsschritt"
254
  "Currency","Währung"
255
  "Allow Direct Buy","Erlaube Sofort-Kaufen"
256
  "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Befüllen Sie das Feld ""Sofort-Kaufen"" unten, um den Sofort-Kaufen-Preis zu definieren. <strong>Hinweis</strong>: wenn auf ""Ja"" gestellt, wird die ""individuelle Verfügbarkeit"" auf 1 gestellt."
257
  "Source","Quelle"
258
  "Price Change","Preisspanne"
259
+ "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","Für Produkte mit Fixpreis ist der Mindestpreis Fr. 0.05 und der Maximalpreis Fr. 2 999.95 sofern die Zahlungsart Kreditkarte aktiviert ist."
260
+ "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","Für Auktionen der Mindest-Sofort-Kaufen Preis ist Fr. 0.1 und muss größer sein, als der Startpreis."
261
+ "If not correctly defined, the minimum and maximum values will be automatically set.","Wenn nicht korrekt definiert, werden die Mininal- und Maximal-Werte automatisch gesetzt."
262
  "Schedule","Zeitplan"
263
  "Start","Start"
264
  "Starting date must start minimum in one hour and maximum 30 days in the future.","Der Verkauf kann frühestens in einer Stunde, spätestens in 30 Tagen starten."
265
  "Start immediately","Sofort starten"
266
+ "Start from","Starte am"
267
  "End","Ende"
268
  "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","Der Verkauf darf frühestens in 24 Stunden, spätestens 10 Tage nach dem Startdatum enden."
269
  "End after %s days","Ende nach %s Tagen"
278
  "Condition Product Source","Zustand des Produkts"
279
  "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Möchten Sie den Zustand des Produkts über das Produktattribut bestimmen? Falls nicht und Sie hier ""Nein"" eintragen, wird der Standardwert aus dem Produktlisting übernommen."
280
  "Warranty","Garantie"
281
+ "Warranty description German","Garantiebeschreibung Deutsch"
282
  "Characters %s. Max. 5 000 characters","Zeichen %s. Max. 5 000 Zeichen"
283
+ "Warranty description French","Garantiebeschreibung Französisch"
284
  "Stock Management","Lagerverwaltung"
285
+ "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Spanne 1 bis 999. Wenn Sie die Lagerhaltungs-Option nutzen, wird die Menge der Produkte mit dem Feld ""Menge"" befüllt. Die maximale Menge ist jedoch 999."
286
  "Use product inventory","Nutze Lagerbestand des Produkts"
287
  "Use custom qty","Nutze spezifizierte Menge"
288
+ "Customization","Personalisierung"
289
+ "Template","Vorlage"
290
+ "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","Um eine Vorlage zu erstellen, gehen Sie zu Ihrem <a href=""%s"">ricardo.ch Konto</a> in ""Meine Verkäufe""."
291
  "Promotion","Promotion"
292
  "Privilege Space","Promo-Fenster"
293
+ "PREMIUMHOMEPAGE","Promo-Fenster"
294
+ "Privilege space on main category page and search results. More information about this feature <a onclick=\window.open('%s');\"">here</a>""","Promo-Fenster auf der Hauptkategorieseite und Suchergebniss Seite. Mehr Informationen über dieses Feature finden Sie <a onclick=\window.open('%s');\"">hier</a>"""
295
  "Home Privilege Space","Promo-Fenster Homepage"
296
  "Privilege space on the homepage. More information about this feature <a onclick=""window.open('%s');"">here</a>","Promo-Fenster auf der Homepage. Mehr Informationen über dieses Feature bekommen Sie <a onclick=""window.open('%s');"">hier</a>"
297
  "Home Space","Promo-Fenster Homepage"
298
  "These options will not be activated for products having no picture.","Diese Option wird nicht aktiviert für Produkte ohne Bilder."
299
  "Until sold","Bis ausverkauft"
300
+ "Listed items cannot be modified. Stop the listing first to make changes.","Eingestellte Produkte können nicht modifiziert werden. Beenden Sie zunächst das Listing um Änderungen vornehmen zu können."
301
  "Back to the list ""%s""","Zurück zur Liste ""%s"""
302
  "Configure product '%s'","Konfiguriere Produkt '%s'"
303
  "Configure all %s selected products","Konfiguriere alle %s gewählten Produkte"
304
  "No ricardo.ch category found","Keine ricardo.ch Kategorie gefunden"
305
  "Give a name","Geben Sie einen Namen an"
306
  "Select a website","Wählen Sie eine Website"
307
+ "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","Die Website(s) müssen für diese Extension konfiguriert und aktiviert sein. Wenn dieses Feld leer ist oder etwas fehlt, <a href=""%s"">konfigurieren</a> Sie bitte die Extension."
308
  "Cancel","Abbrechen"
309
+ "Listed products:","Eingestellte Produkte"
310
+ "Not listed products:","Nicht eingestellte Produkte"
311
  "Add Product(s) from category","Füge Produkt(e) von der Kategorie hinzu"
312
  "Add Product(s)","Füge Produkt(e) hinzu"
313
+ "Stop","Stopp"
314
+ "Remove article listed on ricardo.ch","Entferne auf ricardo.ch eingestellte Artikel"
315
+ "Check & List","Prüfen & Einstellen"
316
+ "Check & list only pending & error items","Prüfen & Einstellen wartender und fehlerhafter Artikel"
317
  "List","Einstellen"
318
+ "List only ""Ready to list"" items","Nur Produkte einstellen, die den Status ""Fertig zum Einstellen"" haben"
319
  "Edit Products Listing '%s'","Bearbeite Produktlisting '%s'"
320
  "New Products Listing","Neues Produktlisting"
321
  "Websites","Websites"
326
  "View Logs","Siehe Logs"
327
  "Change status","Ändere Status"
328
  "Delete","Löschen"
329
+ "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is ""Listed""","Sind Sie sicher, dass Sie die Produktlisting(s) löschen möchten? Beachten Sie, das nur aktive Listen gelöscht werden können."
330
  "Products Listing Log ""%s""","Produktlistings Log ""%s"""
331
  "Edit ""%s""","Bearbeite ""%s"""
332
  "Job ID","Job ID"
339
  "Job Type","Job Typ"
340
  "Job Message","Job Nachricht"
341
  "Current Progress","Aktueller Fortschritt"
342
+ "Started at","Gestartet am"
343
  "Ended at","Beendet am"
344
  "Are you sure that you want to delete this/these job(s)?","Sind Sie sicher, dass Sie diese Vorgänge löschen möchten?"
345
  "Show Products Listing","Zeige Produktlisting"
350
  "You may also access to the %s content of this page</a> in a new window.","Sie können den %s Inhalt dieser Seite auch </a> in einem neuen Fenster bearbeiten."
351
  "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Ihre ricardo.ch-API-Token-Daten laufen in %s Tagen für diese Webseite ""%s"" ab."
352
  "No ricardo.ch API Authorization have been found for the website ""%s"".","Keine ricardo.ch-API-Authorisierung wurde für diese Website ""%s"" gefunden."
353
+ "You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," Sie müssen Ihr Konto authorisieren, um Zugang zur ricardo.ch-API zu bekommen. Sie können das mittels der <a href=""%s"">ricardo.ch Authorisierungsseite</a> tun. Wenn Sie das nicht tun, werden alle Aufrufe von und zu ricardo.ch blockiert."
354
  "To hide this message, you have to <a href=""%s"">disable the extension</a>.","Um diese Nachricht zu verbergen, müssen Sie die Extension <a href=""%s"">deaktivieren</a>."
355
  "The Official ricardo.ch Extension has been installed.","Die offizielle ricardo.ch Extension wurde installiert."
356
  "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Bitte klicken Sie <a href=""%s"">hier</a> um den Zugang zur ricardo.ch API zu konfigurieren."
357
  "Latest message for the selected job","Letzte Nachricht für den gewählten Vorgang"
358
+ "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Bearbeiten</a> Sie Ihre Produktlistings, wenn notwendig"
359
  "No message found.","Keine Nachricht gefunden."
360
+ "Confirm","Bestätigen"
361
  "More Views","Mehr Ansichten"
362
  "%s days 0:0:0","%s Tage 0:0:0"
363
  "Starting price","Startpreis"
364
+ "Place a bit","Gebot abgeben"
365
  "Quantity","Anzahl"
366
  "of %s","von %s"
367
  "Details","Details"
379
  "Shipping Price:","Versandkosten:"
380
  "Shipping Availability:","Versandverfügbarkeit:"
381
  "Shipping Description (CH):","Versandkosten Beschreibung (CH):"
382
+ "You must select a ricardo.ch Category if you set this option","Sie müssen eine ricardo.ch-Kategorie wählen, um diese Option zu aktivieren"
383
  "The task will start few minutes","Der Vorgang wird in ein paar Minuten starten"
384
  "No progress","Kein Fortschritt"
385
  "The product list has been stopped.","Die Produktliste wurde beendet."
 
386
  "ricardo.ch Lifetime Sales","ricardo.ch Gesamtumsatz"
387
  "Turnover per month","Umsatz pro Monat"
388
  "Best Sellers","Meistverkaufte Produkte"
389
+ "Qty sold","Verkaufte Menge"
390
+ "Product Name","Produktbezeichnung"
391
  "SKU","SKU"
392
  "Price","Preis"
393
  "Your ricardo.ch API Token","Ihre ricardo.ch API Token"
394
+ "PREMIUMCATEGORYBRONZE","Klein"
395
+ "PREMIUMCATEGORYSILVER","Mittel"
396
+ "PREMIUMCATEGORYGOLD","Groß"
 
 
397
  "TYPE_BANK_TRANSFER","Banküberweisung"
398
+ "TYPE_CASH","Barzahlung"
399
  "TYPE_CREDIT_CARD","Kreditkarte via ricardo.ch"
400
+ "TYPE_OTHER","Andere Zahlungsmethoden"
 
401
  "UNKNOWNPROPERTY","Unbekannter Besitzer"
402
  "CUSTOMERNOTARTICLEOWNER","Der Kunde darf das Produkt nicht bearbeiten, da er nicht der Besitzer ist."
403
  "CHECKPASSWORDWRONGPASSWORD","Das Passwort ist falsch."
409
  "TOKENEXPIRED","Token ausgelaufen für API "
410
  "ANONYMOUSNOTALLOWED","Anonymer Aufruf ist nicht erlaubt"
411
  "TEMPORAYCREDENTIALEXPIRED","temporärer Zugang abgelaufen für API"
412
+ "TEMPORAYCREDENTIALUNVALIDATED","temporärer Zugang für API nicht gültig"
413
  "SESSIONEXPIRED","Session abgelaufen"
414
  "UPDATEPASSWORDPOLICYINVALID","CustomerUpdatePassword wird mit einem Passwort mit invaliden Bedingungen genutzt. Es müssen mindestens 8 Zeichen sein, davon mindestens ein Großbuchstabe und ein Nicht-Alphanumerisches Zeichen."
415
  "AFTOKENERROR","Anti Forgery token error "
420
  "ACCOUNTCLOSED","Das Kundenkonto wurde geschlossen."
421
  "METHODNOTALLOWED","Die Partnerschaft stimmt nicht mit der gewählten Methode überein."
422
  "TOKEN_AUTHORIZATION","Die Authorisierung muss nochmal durchgeführt werden"
 
423
  "CLOSEAUCTIONFAILED","Auktion konnte nicht geschlossen werden"
424
  "CLOSECLASSIFIEDFAILED","Ein Produkt konnte nicht klassifiziert werden"
425
  "DELETEPLANNEDFAILED","Ein Produkt konnte nicht gelöscht werden"
430
  "CUSTOMERNOTFOUND","Kunde nicht gefunden"
431
  "EMPTYIPADDRESS","Die IP Adresse ist nicht definiert"
432
  "TECHNICALPROBLEM","Technischer Fehler"
433
+ "ARTICLESAMOUNTLIMIT","Limite für die Menge pro Übertragung liegt bei 100 "
434
  "LISTOFARTICLESEMPTY","Liste der Produkte ist leer"
435
  "UNKNOWNCATEGORYNAME","Kategoriename ist nicht bekannt"
436
+ "EMPTYCOUNTRYID","Länder ID darf nicht leer sein."
437
+ "EMPTYPARTNERID","Partner ID darf nicht leer sein."
438
+ "EMPTYCATEGORY","Kategorie darf nicht leer sein."
439
+ "EMPTYRELISINFOS","Reaktivierungsinformation fehlt"
 
440
  "EMPTYCUSTOMER","Ein technischer Fehler ist aufgetreten. Wir bitten Sie um Entschuldigung. Bitte versuchen Sie es später nochmals oder kontaktieren Sie unseren Kundendienst."
441
+ "UNKNOWNPARTNERID","Unbekannte Partnerschaft"
442
+ "UNKONWNCATEGORYID","Die übergebene Kategorie ID existiert nicht"
443
  "INVALIDDURATION","Die angefragte Dauer ist nicht möglich."
444
+ "RELISTCOUNTEXCEEDED","Bitte beachten Sie, dass Sie ein Artikel höchstens 9 Mal reaktiviert werden kann. "
445
  "STARTPRICETOOHIGH","Bitte setzen Sie einen Startpreis, der gleich oder tiefer als CHF 10 000 000 000 ist."
446
  "STARTPRICETOOLOW","Bitte setzen Sie einen Startpreis, der gleich oder höher als CHF 0.05 ist."
447
  "INVALIDARTICLETYPEFORCATEGORY","Bitte beachten Sie, dass diese Kategorie-Änderung nicht erlaubt ist."
449
  "CATEGORYDEDICATEDTOUSERS","Leider können Sie in dieser Kategorie keine Artikel einstellen. Bitte wählen Sie eine andere Kategorie aus oder kontaktieren Sie unseren Kundendienst."
450
  "INVALIDTEMPLATEID","Bitte überprüfen Sie ob die ausgewählte Vorlage in Ihrem My Ricardo vorhanden ist."
451
  "EMPTYTITLE","Bitte tragen Sie einen Titel in das entsprechende Feld ein."
452
+ "EMPTYDESCRIPTION","Bitte tragen Sie eine Artikelbeschreibung in das entsprechende Feld ein."
453
  "EMPTYSUBTITLE","Bitte tragen Sie einen Untertitel in der zweiten Sprache ein."
454
  "TOOLONGTITLE","Bitte beachten Sie, dass der Titel nicht mehr als 40 Zeichen enthalten darf."
455
  "TOOLONGDESCRIPTION","Bitte beachten Sie, dass Ihre Artikel-Beschreibung nicht mehr als 65'000 Zeichen enthalten darf."
468
  "NODELIVERYCONDITION","Bitte wählen Sie eine Versandart aus. "
469
  "DELIVERYCOSTTOOHIGH","Die von Ihnen definierte Versandkosten sind zu hoch. Bitte wählen Sie einen Betrag der kleiner ist als CHF 210'000."
470
  "MANUALINCREMENTNOTALLOWED","Der Erhöhungschritt kann nicht manuell definiert werden."
471
+ "PLANNEDSCHEDULETOOLOW","Die geplante Startzeit muss mindestens eine Stunde in der Zukunft liegen."
472
  "PLANNEDSCHEDULETOOHIGH","Die von Ihnen definierte ""Startzeit"" für das Einstellen des Artikels liegt zuweit in der Zukunft. Bitte planen Sie max. 30 Tage im Voraus. "
473
+ "REFERENCETOOLONG","Die von eingegebene Referenznummer ist zu lang. Bitte wählen Sie eine Referenznummer mit maximal 40 Zeichen."
474
+ "INVALIDQUANTITYFORAUCTIONBUYNOW","Bitte beachten Sie, dass die Option Sofort-Kaufen nur bei Angeboten mit der Stückzahl 1 gewählt werden kann."
475
  "BUYNOWLOWERTHANSTARTPRICE","Bitte setzen Sie einen Sofort-Kaufen-Preis, der höher als Ihr Startpreis ist."
476
  "RICARDOPAYNOCARSANDBIKES","Über ricardo.ch können keine Autos oder Fahrräder verkauft werden"
477
+ "RICARDOPAYWRONGPAYMENTCONDITIONS","Die gewählte Zahlungsart kann nicht mit der Kreditkartenzahlung kombiniert werden. Bitte wählen Sie eine andere Methode aus."
478
  "RICARDOPAYPRICETOOHIGH","Der Preis ist zu hoch."
479
  "RICARDOPAYWALLETBLOCKED","Das ricardo.ch Pay-Wallet wurde blockiert."
480
  "MAXPICTURESIZEREACHED","Bitte beachten Sie, dass die gesamte Grösse für das Hochladen Ihrer Bilder auf 20 MB beschränkt ist. "
481
  "ERRORRESIZINGPICTURE","Während der Verarbeitung Ihrer Bilder ist ein Fehler aufgetreten. Wir bitten Sie um Entschuldigung."
482
+ "MAXPICTURESCOUNTREACHED","Bitte beachten Sie, dass die maximale Anzahl Bilder pro Artikel auf 10 beschränkt ist."
483
  "INVALIDPROMOTION","Ungültige Promotion."
484
  "INVALIDPROMOTIONCOMBINATION","Bitte beachten Sie, dass die mehrfache Auswahl von Anzeigepaketen nicht möglich ist. "
485
+ "NOTCLOSED","Die Bezahloption „Kreditkartenzahlung“ steht für Autozubehör nicht zur Verfügung. Bitte deaktivieren Sie diese Option."
486
  "EMPTYARTICLEINFOS","Bitte wählen Sie eine Option, um den Zustand Ihres Artikels zu definieren."
487
  "EMPTYDELIVERY","Bitte wählen Sie eine Versandart aus."
488
  "EMPTYPROMOTIONS","Bitte tragen Sie eine Beschreibung für Ihren Artikel in das entsprechende Feld ein."
554
  "CANTUPDATEPICTUREONARTICLEWITHBID","Das Bild kann bei einem Angebot das bereits Gebote erhalten hat nicht aktualisiert werden."
555
  "HTMLTAGSNOTALLOWED","Bitte beachten Sie, dass HTML-Tags in diesem Beschreibungsfeld nicht unterstützt werden"
556
  "WRONGPAYMENTCONDITIONS","Falsche Zahlungsarten"
557
+ "EMPTYPAYMENTCONDITIONIDS","Fehlende Zahlungsarten"
558
+ "NODETAILS","Keine Details verfügbar."
559
+ "ARTICLEALREADYHASCARDPAYMENT","Produkt hat bereits eine Zahlungsart."
560
  "ERRORINSERTINGCARDPAYMENT","Fehler bei der Eingabe der Kartenzahlung."
561
  "ARTICLEDOESNOTHAVECARDPAYMENT","Produkt hat keine Kartenzahlung."
562
  "ERRORREMOVINGCARDPAYMENT","Fehler beim Entfernen der Kartenzahlung"
563
+ "RICARDOPAYNOTACTIVATED","ricardo.ch PayU ist nicht aktiviert."
564
+ "EMPTYPAYMENTMETHODSIDS","Leere Zahlungsart-ID"
565
+ "EMPTYARTICLEID","Leere Produkt-ID"
566
  "INVALIDCARDCOMBINATIONWITHDELIVERYCONDITION","Ungültige Karte in Kombination mit den Versandkonditionen"
567
  "NUMBEROFARTICLELIMITED","Anzahl der Produkte ist limitiert."
568
  "PAYMENTMETHODNEEDALTERNATEONE","Alternative Zahlungsart notwendig."
569
+ "WRONGPAYMENTMETHODS","Falsche Zahlungsart"
570
+ "CUMULATIVESHIPPINGNOTALLOWED","Kumulative Versandkosten nicht erlaubt."
 
571
  "MAXPICTURESCOUNTREACHED","maximale Bilderanzahl erreicht"
572
  "MAXPICTURESIZEREACHED","maximale Bildgröße erreicht"
573
  "ERRORRESIZINGPICTURE","Fehler bei der Grössenänderung der Bilder"
577
  "INVALIDPICTUREINDEX","ungültiger Bildindex"
578
  "MAXLOGOPICTURESIZEREACHED","maximale Logogröße erreicht"
579
  "ERRORRESIZINGLOGOPICTURE","Fehler bei der Größenänderung des Logos"
 
580
  "NOTALLOWEDTOSELL","Produkt nicht erlaubt zu verkaufen"
581
  "BILLINGERROR","BILLINGERROR"
582
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
641
  "UNABLETOINSERT","UNABLETOINSERT"
642
  "CREDITLIMITEXCEEDED","Kreditlimit erreicht. Bitte, kontaktieren Sie ricardo.ch"
643
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
 
644
  "No Options because API is not configured","No Options because API is not configured"
645
  "No Options because API has a problem","No Options because API has a problem"
646
+ "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.","Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
647
+ "Security error occurred with the ricardo API. Please, check your log files.","Security error occurred with the ricardo API. Please, check your log files."
648
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
649
+ "Product Price of %s CHF is incorrect. Minimum price is %s.","Produktpreis von Fr. %s ist falsch. Minimum Preis ist Fr. %s."
650
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
651
  "Following error(s) appeared:","Following error(s) appeared:"
652
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
653
+ "The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible.","The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible."
654
+ "Merge Descriptions","Beschreibungen zusammenführen"
655
+ "Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description.","Beschreibung und Kurzbeschreibung zusammenführen und als eine Artikelbeschreibung auf ricardo.ch veröffentlichen. Die Kurzbeschreibung wird der erste Teil und die normale Beschreibung der zweite Teil der ricardo.ch Artikelbeschreibung sein."
656
+ "Only 10 pictures maximum allowed.","Maximal 10 Bilder erlaubt."
657
+ "The starting date must start one hour in future. It will be automatically updated to list on ricardo.","Das Startdatum muss mindestens eine Stunde in der Zukunft liegen. Es wird automatisch angepasst."
658
+ "Enter product name: e.g. iphone","Produktbezeichnung eingeben (z.B. Iphone)"
659
+ "Sorry, no product found for fees calculation.","Es wurden keine Artikel gefunden um die Gebühren zu berechnen."
660
+ "Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch.","Bitte schliessen Sie dieses Fenster und beheben Sie die Fehler, damit die Artikel auf ricardo.ch eingestellt werden können."
661
+ "Product Listing Configuration","Konfiguration Produklisting"
662
+ "Currency Conversion","Währungsumrechnung"
663
+ "The store's base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation.","Die Webshop Standard-Währung ist %2$s. Auf ricardo.ch kann nur in %1$s eingestellt werden. Bitte beachten Sie, dass alle Preise in %1$s umgerechnet werden. Lesen Sie die Dokumentation für weitere Erklärungen."
664
+ "Currency Rate not configured","Wechselkurs nicht konfiguriert"
665
+ "Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed.","Wechselkurs nicht definiert für CHF. Bitte konfigurieren Sie den Wechselkurs bevor Sie weiterfahren."
666
+ "Replace Carriage Return with br HTML Tag","Zeilenumbrüche umwandeln um Abstände beizubehalten"
667
+ "Do you want to replace into the description the carriage return with <br> HTML Tag?","Wollen Sie Zeilenumbrüche in HTML Tags des Typs <br> umwandeln? Dadurch werden die Abstände zwischen ihren Textblöcken beibehalten."
668
+ "Product listing & promotion","Produktliste & Promotionen"
669
+ "Total price","Gesamtpreis"
670
+ "Important","Wichtig"
671
+ "Listing Fees","Einstellgebühren"
672
+ "ricardo.ch does invoices in %s","ricardo.ch verrechnet ausschliesslich in %s"
673
+ "Sales Fee (following the <a href=""%s"" target=""_blank"">fees rules from 01.07.2014</a>)","Abschlussgebühren (gemäss <a href=""%s"" target=""_blank"">Gebührenreglement vom 01.07.2014</a>)"
674
+ "With the confirmation of the publication, you accept the <a href=""%s"" target=""_blank"">terms and conditions</a> and <a href=""%s"" target=""_blank"">privacy policy</a>","Mit dem Bestätigen und Publizieren akzeptiere ich die <a href=""%s"" target=""_blank"">AGB</a>und die <a href=""%s"" target=""_blank"">Datenschutzerklärung</a> von ricardo.ch"
675
+ "Confirm, check and List","Bestätigen, Prüfen und Einstellen"
676
+ "Send us your configuration","Senden Sie uns Ihre Konfiguration"
677
+ "Export your configuration","Ihre Konfiguration exportieren"
678
+ "Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc...","Möchten Sie über Fehler per Email benachrichtigt werden? Emails werden an die Email Adresse des allgemeinen Kontaktes in Magento versendet im Falle von API Fehlermeldungen, Ablauf von Token, etc…"
app/locale/de_DE/template/email/ricento/support.html ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <!--@subject Diglin - Support ricardo.ch extension from shop {{var shopname}} @-->
2
+ Hi,
3
+
4
+ Please find in attachment the configuration for a support on the ricardo extension for the shop {{var shopname}}:
5
+
6
+ {{var message}}
app/locale/de_DE/template/email/ricento/token_expiration.html ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <!--@subject ricardo.ch API Authorisation renewal for your Magento shop @-->
2
+ Dear Admin,
3
+
4
+ You have to authorize your account to get access to the ricardo.ch API thanks to the ricardo.ch Authorization Page.
5
+ If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked.
6
+
7
+ Please, log in to your <a href="{{var shop_url}}">Magento backend page</a> to follow the instructions displayed in the banner notification.
8
+
9
+ Best regards
app/locale/en_US/Diglin_Ricento.csv CHANGED
@@ -14,13 +14,7 @@
14
  "Merge Order","Merge Order"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?"
16
  "Shipping Calculation","Shipping Calculation"
17
- "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>
18
- ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>
19
- ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.
20
- ","You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>
21
- ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>
22
- ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.
23
- "
24
  "Send Account Creation Confirmation Email","Send Account Creation Confirmation Email"
25
  "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?"
26
  "Send Email for new order","Send Email for new order"
@@ -132,7 +126,6 @@
132
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Product Description will be cut after %s characters when published on ricardo.ch for store ""%s"""
133
  "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Custom Options are not supported. Those won\'t be synchronized into ricardo.ch."
134
  "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock."
135
- "Only %s currency is supported. No conversion will be done.","Only %s currency is supported. No conversion will be done."
136
  "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level."
137
  "Payment and/or Shipping combination are not correct.","Payment and/or Shipping combination are not correct."
138
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s."
@@ -175,7 +168,7 @@
175
  "Only listed product items can be stopped.","Only listed product items can be stopped."
176
  "The job to stop to list your products will start in few minutes.","The job to stop to list your products will start in few minutes."
177
  "Products listing(s) is/are successfully deleted.","Products listing(s) is/are successfully deleted."
178
- "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode(","The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode("
179
  "An error occurred while trying to delete the products listing(s). Please, check your exception log.","An error occurred while trying to delete the products listing(s). Please, check your exception log."
180
  "No products selected.","No products selected."
181
  "The configuration has been saved successfully.","The configuration has been saved successfully."
@@ -184,7 +177,7 @@
184
  "Log(s) is/are successfully deleted.","Log(s) is/are successfully deleted."
185
  "An error occurred while trying to delete the listing log(s). Please, check your exception log.","An error occurred while trying to delete the listing log(s). Please, check your exception log."
186
  "Job(s) is/are successfully deleted.","Job(s) is/are successfully deleted."
187
- "The following job IDs have not been deleted because they are still running: ' . implode(","The following job IDs have not been deleted because they are still running: ' . implode("
188
  "An error occurred while trying to delete the job(s). Please, check your exception log.","An error occurred while trying to delete the job(s). Please, check your exception log."
189
  "ricardo.ch API Signup","ricardo.ch API Signup"
190
  "API Signup","API Signup"
@@ -230,11 +223,11 @@
230
  "Title","Title"
231
  "Website","Website"
232
  "Language","Language"
233
- "Product languages to synchronize to ricardo.ch.ch","Product languages to synchronize to ricardo.ch.ch"
234
- "ricardo.ch.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc)."
235
  "Default language to publish","Default language to publish"
236
- "Which language to publish by default to ricardo.ch.ch when the product content is not available in a language","Which language to publish by default to ricardo.ch.ch when the product content is not available in a language"
237
- "Store View for ' . ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language","Store View for ' . ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language"
238
  "Payment Methods","Payment Methods"
239
  "Payment Description German","Payment Description German"
240
  "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other"""
@@ -249,7 +242,6 @@
249
  "Shipping Description German","Shipping Description German"
250
  "Characters: %s. Max. 5 000 characters","Characters: %s. Max. 5 000 characters"
251
  "Shipping Description French","Shipping Description French"
252
- "The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed.","The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed."
253
  "Category","Category"
254
  "ricardo.ch Category","ricardo.ch Category"
255
  "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)"
@@ -298,6 +290,7 @@
298
  "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales""."
299
  "Promotion","Promotion"
300
  "Privilege Space","Privilege Space"
 
301
  "Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
302
  "Home Privilege Space","Home Privilege Space"
303
  "Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
@@ -333,7 +326,7 @@
333
  "View Logs","View Logs"
334
  "Change status","Change status"
335
  "Delete","Delete"
336
- "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed""","Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed"""
337
  "Products Listing Log ""%s""","Products Listing Log ""%s"""
338
  "Edit ""%s""","Edit ""%s"""
339
  "Job ID","Job ID"
@@ -390,16 +383,21 @@
390
  "The task will start few minutes","The task will start few minutes"
391
  "No progress","No progress"
392
  "The product list has been stopped.","The product list has been stopped."
393
-
394
- "PREMIUMCATEGORYBRONZE", "Small"
395
- "PREMIUMCATEGORYSILVER", "Medium"
396
- "PREMIUMCATEGORYGOLD", "Big"
397
-
398
- "TYPE_BANK_TRANSFER", "Bank transfer"
399
- "TYPE_CASH", "Cash"
400
- "TYPE_CREDIT_CARD", "Credit Card via ricardo.ch"
401
- "TYPE_OTHER", "Other payment method"
402
-
 
 
 
 
 
403
  "UNKNOWNPROPERTY","Unknow Property"
404
  "CUSTOMERNOTARTICLEOWNER","The current customer can't act on the article as he's not the owner "
405
  "CHECKPASSWORDWRONGPASSWORD","The CheckPassword is used with a wrong password "
@@ -422,7 +420,6 @@
422
  "ACCOUNTCLOSED","The account linked to the customer has been closed"
423
  "METHODNOTALLOWED","The Partnership used is not allowed to use this method"
424
  "TOKEN_AUTHORIZATION","The authorization of the token must be again requested"
425
-
426
  "CLOSEAUCTIONFAILED","Failed to close the auction"
427
  "CLOSECLASSIFIEDFAILED","Failed to close a classified article"
428
  "DELETEPLANNEDFAILED","Failed to delete planned article"
@@ -436,7 +433,6 @@
436
  "ARTICLESAMOUNTLIMIT","Limit for amount of articles per 1 push is 100 "
437
  "LISTOFARTICLESEMPTY","list of article empty"
438
  "UNKNOWNCATEGORYNAME","Category name specified is unknown"
439
-
440
  "EMPTYCOUNTRYID","EMPTYCOUNTRYID"
441
  "EMPTYPARTNERID","EMPTYPARTNERID"
442
  "EMPTYCATEGORY","EMPTYCATEGORY"
@@ -572,7 +568,6 @@
572
  "PAYMENTMETHODNEEDALTERNATEONE","PAYMENTMETHODNEEDALTERNATEONE"
573
  "WRONGPAYMENTMETHODS","WRONGPAYMENTMETHODS"
574
  "CUMULATIVESHIPPINGNOTALLOWED","CUMULATIVESHIPPINGNOTALLOWED"
575
-
576
  "MAXPICTURESCOUNTREACHED","MAXPICTURESCOUNTREACHED"
577
  "MAXPICTURESIZEREACHED","MAXPICTURESIZEREACHED"
578
  "ERRORRESIZINGPICTURE","ERRORRESIZINGPICTURE"
@@ -582,7 +577,6 @@
582
  "INVALIDPICTUREINDEX","INVALIDPICTUREINDEX"
583
  "MAXLOGOPICTURESIZEREACHED","MAXLOGOPICTURESIZEREACHED"
584
  "ERRORRESIZINGLOGOPICTURE","ERRORRESIZINGLOGOPICTURE"
585
-
586
  "NOTALLOWEDTOSELL","Product Not allowed to be sold"
587
  "BILLINGERROR","BILLINGERROR"
588
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
@@ -647,13 +641,38 @@
647
  "UNABLETOINSERT","UNABLETOINSERT"
648
  "CREDITLIMITEXCEEDED","Credit limit exceeded. Please contact ricardo.ch"
649
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
650
-
651
  "No Options because API is not configured","No Options because API is not configured"
652
  "No Options because API has a problem","No Options because API has a problem"
653
- "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.", "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
654
- "Security error occurred with the ricardo API. Please, check your log files.", "Security error occurred with the ricardo API. Please, check your log files."
655
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
656
  "Product Price of %s CHF is incorrect. Minimum price is %s.","Product Price of %s CHF is incorrect. Minimum price is %s."
657
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
658
  "Following error(s) appeared:","Following error(s) appeared:"
659
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  "Merge Order","Merge Order"
15
  "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?"
16
  "Shipping Calculation","Shipping Calculation"
17
+ "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them."
 
 
 
 
 
 
18
  "Send Account Creation Confirmation Email","Send Account Creation Confirmation Email"
19
  "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?"
20
  "Send Email for new order","Send Email for new order"
126
  "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Product Description will be cut after %s characters when published on ricardo.ch for store ""%s"""
127
  "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Custom Options are not supported. Those won\'t be synchronized into ricardo.ch."
128
  "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock."
 
129
  "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level."
130
  "Payment and/or Shipping combination are not correct.","Payment and/or Shipping combination are not correct."
131
  "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s."
168
  "Only listed product items can be stopped.","Only listed product items can be stopped."
169
  "The job to stop to list your products will start in few minutes.","The job to stop to list your products will start in few minutes."
170
  "Products listing(s) is/are successfully deleted.","Products listing(s) is/are successfully deleted."
171
+ "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s","The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s"
172
  "An error occurred while trying to delete the products listing(s). Please, check your exception log.","An error occurred while trying to delete the products listing(s). Please, check your exception log."
173
  "No products selected.","No products selected."
174
  "The configuration has been saved successfully.","The configuration has been saved successfully."
177
  "Log(s) is/are successfully deleted.","Log(s) is/are successfully deleted."
178
  "An error occurred while trying to delete the listing log(s). Please, check your exception log.","An error occurred while trying to delete the listing log(s). Please, check your exception log."
179
  "Job(s) is/are successfully deleted.","Job(s) is/are successfully deleted."
180
+ "The following job IDs have not been deleted because they are still running: %s","The following job IDs have not been deleted because they are still running: %s"
181
  "An error occurred while trying to delete the job(s). Please, check your exception log.","An error occurred while trying to delete the job(s). Please, check your exception log."
182
  "ricardo.ch API Signup","ricardo.ch API Signup"
183
  "API Signup","API Signup"
223
  "Title","Title"
224
  "Website","Website"
225
  "Language","Language"
226
+ "Product languages to synchronize to ricardo.ch","Product languages to synchronize to ricardo.ch"
227
+ "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc)."
228
  "Default language to publish","Default language to publish"
229
+ "Which language to publish by default to ricardo.ch when the product content is not available in a language","Which language to publish by default to ricardo.ch when the product content is not available in a language"
230
+ "Store View for %s","Store View for %s"
231
  "Payment Methods","Payment Methods"
232
  "Payment Description German","Payment Description German"
233
  "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other"""
242
  "Shipping Description German","Shipping Description German"
243
  "Characters: %s. Max. 5 000 characters","Characters: %s. Max. 5 000 characters"
244
  "Shipping Description French","Shipping Description French"
 
245
  "Category","Category"
246
  "ricardo.ch Category","ricardo.ch Category"
247
  "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)"
290
  "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales""."
291
  "Promotion","Promotion"
292
  "Privilege Space","Privilege Space"
293
+ "PREMIUMHOMEPAGE","Privilege Space"
294
  "Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
295
  "Home Privilege Space","Home Privilege Space"
296
  "Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
326
  "View Logs","View Logs"
327
  "Change status","Change status"
328
  "Delete","Delete"
329
+ "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is ""Listed""","Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is ""Listed"""
330
  "Products Listing Log ""%s""","Products Listing Log ""%s"""
331
  "Edit ""%s""","Edit ""%s"""
332
  "Job ID","Job ID"
383
  "The task will start few minutes","The task will start few minutes"
384
  "No progress","No progress"
385
  "The product list has been stopped.","The product list has been stopped."
386
+ "ricardo.ch Lifetime Sales","ricardo.ch Lifetime Sales"
387
+ "Turnover per month","Turnover per month"
388
+ "Best Sellers","Meistverkaufte Produkte"
389
+ "Qty sold","Qty sold"
390
+ "Product Name","Product Name"
391
+ "SKU","SKU"
392
+ "Price","Price"
393
+ "Your ricardo.ch API Token","Your ricardo.ch API Token"
394
+ "PREMIUMCATEGORYBRONZE","Small"
395
+ "PREMIUMCATEGORYSILVER","Medium"
396
+ "PREMIUMCATEGORYGOLD","Big"
397
+ "TYPE_BANK_TRANSFER","Bank transfer"
398
+ "TYPE_CASH","Cash"
399
+ "TYPE_CREDIT_CARD","Credit Card via ricardo.ch"
400
+ "TYPE_OTHER","Other payment method"
401
  "UNKNOWNPROPERTY","Unknow Property"
402
  "CUSTOMERNOTARTICLEOWNER","The current customer can't act on the article as he's not the owner "
403
  "CHECKPASSWORDWRONGPASSWORD","The CheckPassword is used with a wrong password "
420
  "ACCOUNTCLOSED","The account linked to the customer has been closed"
421
  "METHODNOTALLOWED","The Partnership used is not allowed to use this method"
422
  "TOKEN_AUTHORIZATION","The authorization of the token must be again requested"
 
423
  "CLOSEAUCTIONFAILED","Failed to close the auction"
424
  "CLOSECLASSIFIEDFAILED","Failed to close a classified article"
425
  "DELETEPLANNEDFAILED","Failed to delete planned article"
433
  "ARTICLESAMOUNTLIMIT","Limit for amount of articles per 1 push is 100 "
434
  "LISTOFARTICLESEMPTY","list of article empty"
435
  "UNKNOWNCATEGORYNAME","Category name specified is unknown"
 
436
  "EMPTYCOUNTRYID","EMPTYCOUNTRYID"
437
  "EMPTYPARTNERID","EMPTYPARTNERID"
438
  "EMPTYCATEGORY","EMPTYCATEGORY"
568
  "PAYMENTMETHODNEEDALTERNATEONE","PAYMENTMETHODNEEDALTERNATEONE"
569
  "WRONGPAYMENTMETHODS","WRONGPAYMENTMETHODS"
570
  "CUMULATIVESHIPPINGNOTALLOWED","CUMULATIVESHIPPINGNOTALLOWED"
 
571
  "MAXPICTURESCOUNTREACHED","MAXPICTURESCOUNTREACHED"
572
  "MAXPICTURESIZEREACHED","MAXPICTURESIZEREACHED"
573
  "ERRORRESIZINGPICTURE","ERRORRESIZINGPICTURE"
577
  "INVALIDPICTUREINDEX","INVALIDPICTUREINDEX"
578
  "MAXLOGOPICTURESIZEREACHED","MAXLOGOPICTURESIZEREACHED"
579
  "ERRORRESIZINGLOGOPICTURE","ERRORRESIZINGLOGOPICTURE"
 
580
  "NOTALLOWEDTOSELL","Product Not allowed to be sold"
581
  "BILLINGERROR","BILLINGERROR"
582
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
641
  "UNABLETOINSERT","UNABLETOINSERT"
642
  "CREDITLIMITEXCEEDED","Credit limit exceeded. Please contact ricardo.ch"
643
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
 
644
  "No Options because API is not configured","No Options because API is not configured"
645
  "No Options because API has a problem","No Options because API has a problem"
646
+ "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.","Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
647
+ "Security error occurred with the ricardo API. Please, check your log files.","Security error occurred with the ricardo API. Please, check your log files."
648
  "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
649
  "Product Price of %s CHF is incorrect. Minimum price is %s.","Product Price of %s CHF is incorrect. Minimum price is %s."
650
  "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
651
  "Following error(s) appeared:","Following error(s) appeared:"
652
  "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
653
+ "The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible.","The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible."
654
+ "Merge Descriptions","Merge Descriptions"
655
+ "Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description.","Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description."
656
+ "Only 10 pictures maximum allowed.","Only 10 pictures maximum allowed."
657
+ "The starting date must start one hour in future. It will be automatically updated to list on ricardo.","The starting date must start one hour in future. It will be automatically updated to list on ricardo."
658
+ "Enter product name: e.g. iphone","Enter product name: e.g. iphone"
659
+ "Sorry, no product found for fees calculation.","Sorry, no product found for fees calculation."
660
+ "Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch.","Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch."
661
+ "Product Listing Configuration","Product Listing Configuration"
662
+ "Currency Conversion","Currency Conversion"
663
+ "The store's base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation.","The store's base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation."
664
+ "Currency Rate not configured","Currency Rate not configured"
665
+ "Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed.","Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed."
666
+ "Replace Carriage Return with br HTML Tag","Replace Carriage Return with br HTML Tag"
667
+ "Do you want to replace into the description the carriage return with <br> HTML Tag?","Do you want to replace into the description the carriage return with <br> HTML Tag?"
668
+ "Product listing & promotion","Product listing & promotion"
669
+ "Total price","Total price"
670
+ "Important","Important"
671
+ "Listing Fees","Listing Fees"
672
+ "ricardo.ch does invoices in %s","ricardo.ch does invoices in %s"
673
+ "Sales Fee (following the <a href=""%s"" target=""_blank"">fees rules from 01.07.2014</a>)","Sales Fee (following the <a href=""%s"" target=""_blank"">fees rules from 01.07.2014</a>)"
674
+ "With the confirmation of the publication, you accept the <a href=""%s"" target=""_blank"">terms and conditions</a> and <a href=""%s"" target=""_blank"">privacy policy</a>","With the confirmation of the publication, you accept the <a href=""%s"" target=""_blank"">terms and conditions</a> and <a href=""%s"" target=""_blank"">privacy policy</a>"
675
+ "Confirm, check and List","Confirm, check and List"
676
+ "Send us your configuration","Send us your configuration"
677
+ "Export your configuration","Export your configuration"
678
+ "Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc...","Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc..."
app/locale/en_US/template/email/ricento/token_expiration.html ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <!--@subject ricardo.ch API Authorisation renewal for your Magento shop @-->
2
+ Dear Admin,
3
+
4
+ You have to authorize your account to get access to the ricardo.ch API thanks to the ricardo.ch Authorization Page.
5
+ If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked.
6
+
7
+ Please, log in to your <a href="{{var shop_url}}">Magento backend page</a> to follow the instructions displayed in the banner notification.
8
+
9
+ Best regards
app/locale/fr_FR/Diglin_Ricento.csv CHANGED
@@ -1,117 +1,111 @@
1
  "ricardo.ch","ricardo.ch"
2
- "Dashboard","Dashboard"
3
- "Products Listing","Products Listing"
4
- "Logs","Logs"
5
- "ricardo.ch Assistant","ricardo.ch Assistant"
6
  "Configuration","Configuration"
7
- "Ricento by Diglin GmbH","Ricento by Diglin GmbH"
8
- "Log","Log"
9
- "ricardo.ch Payment Methods","ricardo.ch Payment Methods"
10
- "ricardo.ch Shipping","ricardo.ch Shipping"
11
- "Admin Email Notification","Admin Email Notification"
12
- "Private message","Private message"
13
- "Global Configuration","Global Configuration"
14
- "Merge Order","Merge Order"
15
- "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?"
16
- "Shipping Calculation","Shipping Calculation"
17
- "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>
18
- ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>
19
- ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.
20
- ","You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>
21
- ""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>
22
- ""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.
23
- "
24
- "Send Account Creation Confirmation Email","Send Account Creation Confirmation Email"
25
- "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?"
26
- "Send Email for new order","Send Email for new order"
27
- "Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?"
28
- "API Token Configuration","API Token Configuration"
29
- "General API Config","General API Config"
30
- "ricardo.ch Extension enabled","ricardo.ch Extension enabled"
31
- "Development Mode","Development Mode"
32
- "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below."
33
  "Debug","Debug"
34
- "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast."
35
- "German API Token","German API Token"
36
- "PROD German Partner Key","PROD German Partner Key"
37
- "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page"
38
- "PROD German Partner Password","PROD German Partner Password"
39
- "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page"
40
- "DEV German Partner Key","DEV German Partner Key"
41
- "DEV German Partner Password","DEV German Partner Password"
42
- "French API Token","French API Token"
43
- "PROD French Partner Key","PROD French Partner Key"
44
- "PROD French Partner Password","PROD French Partner Password"
45
- "DEV French Partner Key","DEV French Partner Key"
46
- "DEV French Partner Password","DEV French Partner Password"
47
- "Cleanup Synchronization Jobs Log","Cleanup Synchronization Jobs Log"
48
- "Enabled","Enabled"
49
- "Keep for X days","Keep for X days"
50
- "Cleanup Listings Log","Cleanup Listings Log"
51
- "ricardo.ch API Payment Methods","ricardo.ch API Payment Methods"
52
- "Bank Transfer Instructions","Bank Transfer Instructions"
53
- "Accepted Currency","Accepted Currency"
54
- "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold"
55
- "Invalid start date.","Invalid start date."
56
- "The end date must be in the future.","The end date must be in the future."
57
- "Listed listings cannot be modified. Stop the listing first to make changes.","Listed listings cannot be modified. Stop the listing first to make changes."
58
- "An error occurred while saving the configuration.","An error occurred while saving the configuration."
59
- "ricardo.ch Service Model doesn\'t exists.","ricardo.ch Service Model doesn\'t exists."
60
- "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed."
61
  "API language provided for the Service Manager is not supported.","API language provided for the Service Manager is not supported."
62
- "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Error while trying to connect to the ricardo.ch API. Please, check your log files."
63
- "The format of the token is invalid","The format of the token is invalid"
64
- "The dispatcher of type '%s' is not found at %s.","The dispatcher of type '%s' is not found at %s."
65
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
66
- "The product has been sold","The product has been sold"
67
- "Customer creation failed! ricardo.ch transaction cannot be added.","Customer creation failed! ricardo.ch transaction cannot be added."
68
- "Order automatically generated by the ricardo.ch Extension.","Order automatically generated by the ricardo.ch Extension."
69
- "Payment is pending","Payment is pending"
70
- "Payment has been completed on ricardo.ch side","Payment has been completed on ricardo.ch side"
71
- "Order canceled on ricardo.ch side","Order canceled on ricardo.ch side"
72
- "Country Code is not available. Please contact the author of this extension or support.","Country Code is not available. Please contact the author of this extension or support."
73
- "Report: %d success, %d warning(s), %d error(s)","Report: %d success, %d warning(s), %d error(s)"
74
- "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">clicking here</a>. Products with an error won't be synchronized, you have to fix the problem first.","Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">clicking here</a>. Products with an error won\'t be synchronized, you have to fix the problem first."
75
- "The product is now live on ricardo.ch","The product is now live on ricardo.ch"
76
- "Sorry, the product has not been sold","Sorry, the product has not been sold"
77
- "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch"
78
- "The product has been removed from ricardo.ch","The product has been removed from ricardo.ch"
79
- "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it."
80
- "Report: %d success, %d error(s)","Report: %d success, %d error(s)"
81
- "errors","errors"
82
- "warnings","warnings"
83
- "success","success"
84
- "The Job has finished with %s.","The Job has finished with %s."
85
- "Please, view the <a href=""%s"">log</a> for details.","Please, view the <a href=""%s"">log</a> for details."
86
- "No item is ready for this job. No action has been done.","No item is ready for this job. No action has been done."
87
- "Error Code: %d","Error Code: %d"
88
  "Notice","Notice"
89
- "Success","Success"
90
- "Error","Error"
91
- "Warning","Warning"
92
- "Product item checks","Product item checks"
93
- "List product item to ricardo.ch","List product item to ricardo.ch"
94
- "Stop product item to ricardo.ch","Stop product item to ricardo.ch"
95
- "Default Values","Default Values"
96
- "No package","No package"
97
- "-- Select Product Attribute --","-- Select Product Attribute --"
98
- "-- Select Method --","-- Select Method --"
99
- "No change","No change"
100
- "Relative increase (+ %)","Relative increase (+ %)"
101
- "Relative decrease (- %)","Relative decrease (- %)"
102
- "Absolute increase (+)","Absolute increase (+)"
103
- "Absolute decrease (-)","Absolute decrease (-)"
104
- "None","None"
105
- "ricardo.ch Condition","ricardo.ch Condition"
106
- "-- Please Select --","-- Please Select --"
107
- "Auction","Auction"
108
- "Buy now","Buy now"
109
- "Highest Price","Highest Price"
110
- "Cumulative","Cumulative"
111
- "Pending","Pending"
112
- "Running","Running"
113
- "Ready","Ready"
114
- "Completed","Completed"
115
  "Products Check Job","Products Check Job"
116
  "List Job","List Job"
117
  "Stop List Job","Stop List Job"
@@ -119,302 +113,297 @@
119
  "Relist Job","Relist Job"
120
  "Update Job","Update Job"
121
  "Sync List Job","Sync List Job"
122
- "-- Please select --","-- Please select --"
123
- "All languages","All languages"
124
- "Listed","Listed"
125
- "Stopped","Stopped"
126
- "Ready to list","Ready to list"
127
- "Check in progress...","Check in progress..."
128
- "List in progress...","List in progress..."
129
- "Job in progress...","Job in progress..."
130
- "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Product Title will be cut after %s characters when published on ricardo.ch for store ""%s"""
131
- "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s"""
132
- "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","Product Description will be cut after %s characters when published on ricardo.ch for store ""%s"""
133
- "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Custom Options are not supported. Those won\'t be synchronized into ricardo.ch."
134
- "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock."
135
- "Only %s currency is supported. No conversion will be done.","Only %s currency is supported. No conversion will be done."
136
- "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level."
137
- "Payment and/or Shipping combination are not correct.","Payment and/or Shipping combination are not correct."
138
- "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s."
139
- "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Product Price of %s CHF is incorrect for a direct sales. Price must be between %s and %s."
140
- "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days"
141
- "You cannot use the privilege spaces as you do not have any pictures for this product.","You cannot use the privilege spaces as you do not have any pictures for this product."
142
- "This increment value is not possible for this start price.","This increment value is not possible for this start price."
143
- "Only the following combinations are possible:","Only the following combinations are possible:"
144
- "Start price is between","Start price is between"
145
- "Increment must be between","Increment must be between"
146
- "This payment method combination is not possible.","This payment method combination is not possible."
147
- "The following combinations are possible:","The following combinations are possible:"
148
- "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method"
149
- "No category will be displayed, the products listing doesn\'t exists. Please, close the window.","No category will be displayed, the products listing doesn\'t exists. Please, close the window."
150
- "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window."
151
- "Product(s) from the selected categories cannot be saved. The products listing doesn\'t exists.","Product(s) from the selected categories cannot be saved. The products listing doesn\'t exists."
152
- "You are not allowed to save the products listing, so you cannot add products from a category.","You are not allowed to save the products listing, so you cannot add products from a category."
153
- "%d product(s) added to the listing","%d product(s) added to the listing"
154
- "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Error occurred while saving the product(s) from the selected categories. Please check your exception log."
155
- "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process"
156
- "Listing name and website must be specified.","Listing name and website must be specified."
157
- "We have detected and set for you the language configuration. Please, review it before to go further.","We have detected and set for you the language configuration. Please, review it before to go further."
158
- "The listing has been saved.","The listing has been saved."
159
- "An error occurred while saving the listing.","An error occurred while saving the listing."
160
- "Listed listings cannot be deleted. Stop the listing first.","Listed listings cannot be deleted. Stop the listing first."
161
- "Listing deleted","Listing deleted"
162
- "%d products removed from listing","%d products removed from listing"
163
- "%d products are listed and could not be removed","%d products are listed and could not be removed"
164
- "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire."
165
- "A similar job is already running. This job won\'t be executed.","A similar job is already running. This job won\'t be executed."
166
- "It\'s s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","It\'s s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process"
167
- "An error occurred while starting this job. Please check your log file.","An error occurred while starting this job. Please check your log file."
168
- "The job to check your products listing will start in few minutes. You can check the progression below.","The job to check your products listing will start in few minutes. You can check the progression below."
169
- "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues."
170
- "There is no product ready to be listed. Please, add products to your products listing ""%s"".","There is no product ready to be listed. Please, add products to your products listing ""%s""."
171
- "There is no pending product to check.","There is no pending product to check."
172
- "The job to list your products listing will start in few minutes.","The job to list your products listing will start in few minutes."
173
- "You can check the progression below.","You can check the progression below."
174
- "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d."
175
- "Only listed product items can be stopped.","Only listed product items can be stopped."
176
- "The job to stop to list your products will start in few minutes.","The job to stop to list your products will start in few minutes."
177
- "Products listing(s) is/are successfully deleted.","Products listing(s) is/are successfully deleted."
178
- "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode(","The following products listings IDs have not been deleted because they are still listed on ricardo.ch: ' . implode("
179
- "An error occurred while trying to delete the products listing(s). Please, check your exception log.","An error occurred while trying to delete the products listing(s). Please, check your exception log."
180
- "No products selected.","No products selected."
181
- "The configuration has been saved successfully.","The configuration has been saved successfully."
182
- "An error occurred while saving the configuration. Please, check your log files for more details.","An error occurred while saving the configuration. Please, check your log files for more details."
183
- "It\'s just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","It\'s just a preview. Please, be aware that the display on ricardo.ch might be slightly different."
184
- "Log(s) is/are successfully deleted.","Log(s) is/are successfully deleted."
185
- "An error occurred while trying to delete the listing log(s). Please, check your exception log.","An error occurred while trying to delete the listing log(s). Please, check your exception log."
186
- "Job(s) is/are successfully deleted.","Job(s) is/are successfully deleted."
187
- "The following job IDs have not been deleted because they are still running: ' . implode(","The following job IDs have not been deleted because they are still running: ' . implode("
188
- "An error occurred while trying to delete the job(s). Please, check your exception log.","An error occurred while trying to delete the job(s). Please, check your exception log."
189
  "ricardo.ch API Signup","ricardo.ch API Signup"
190
  "API Signup","API Signup"
191
- "ricardo.ch Assistant Portal","ricardo.ch Assistant Portal"
192
- "Assistant Portal","Assistant Portal"
193
- "Only Ajax call is allowed here.","Only Ajax call is allowed here."
194
- "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side."
195
- "Your ricardo.ch account has been authorized to get access to the API.","Your ricardo.ch account has been authorized to get access to the API."
196
- "An error occurred while saving the token. Please, check your log files.","An error occurred while saving the token. Please, check your log files."
197
- "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason."
198
  "Sign Up to ricardo.ch API","Sign Up to ricardo.ch API"
199
- "API Authorization","API Authorization"
200
- "No Selection","No Selection"
201
- "Open ricardo.ch Category Window","Open ricardo.ch Category Window"
202
- "Add products from selected categories","Add products from selected categories"
203
- "Only product types supported, enabled and not listed in other products listing will be added.","Only product types supported, enabled and not listed in other products listing will be added."
204
- "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won\'t allow to add products of its subcategories.","Be aware, you have also to select the sub-categories, otherwise selecting only a top category won\'t allow to add products of its subcategories."
205
- "Create new listing","Create new listing"
206
- "Show Synchronization Jobs","Show Synchronization Jobs"
207
- "General","General"
208
- "Products","Products"
209
- "Sales Options","Sales Options"
210
- "Rules","Rules"
211
- "Product ID","Product ID"
212
- "Name","Name"
213
- "Price","Price"
214
  "Type","Type"
215
  "SKU","SKU"
216
- "Inventory","Inventory"
217
  "Status","Status"
218
  "Action","Action"
219
- "Preview","Preview"
220
- "Configure","Configure"
221
- "Remove","Remove"
222
- "Are you sure to remove this/these product(s)?","Are you sure to remove this/these product(s)?"
223
- "Remove from list","Remove from list"
224
- "the sales options","the sales options"
225
- "the shipping and payment rules","the shipping and payment rules"
226
- "This product has been configured for %s %s","This product has been configured for %s %s"
227
- "The product has custom options, those will not be added to ricardo.ch!","The product has custom options, those will not be added to ricardo.ch!"
228
  "ID","ID"
229
- "Add selected product(s)","Add selected product(s)"
230
- "Title","Title"
231
- "Website","Website"
232
- "Language","Language"
233
- "Product languages to synchronize to ricardo.ch.ch","Product languages to synchronize to ricardo.ch.ch"
234
- "ricardo.ch.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc)."
235
- "Default language to publish","Default language to publish"
236
- "Which language to publish by default to ricardo.ch.ch when the product content is not available in a language","Which language to publish by default to ricardo.ch.ch when the product content is not available in a language"
237
- "Store View for ' . ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language","Store View for ' . ucwords(Mage::app()->getLocale()->getTranslation($lang, 'language"
238
- "Payment Methods","Payment Methods"
239
- "Payment Description German","Payment Description German"
240
- "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other"""
241
- "Payment Description French","Payment Description French"
242
- "Shipping Methods","Shipping Methods"
243
- "Shipping Price","Shipping Price"
244
- "Free shipping","Free shipping"
245
- "Is Shipping fee cumulative","Is Shipping fee cumulative"
246
- "If you select this option, the shipping fee will be calculate for each sold product.","If you select this option, the shipping fee will be calculate for each sold product."
247
- "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option."
248
- "Shipping Availability","Shipping Availability"
249
- "Shipping Description German","Shipping Description German"
250
- "Characters: %s. Max. 5 000 characters","Characters: %s. Max. 5 000 characters"
251
- "Shipping Description French","Shipping Description French"
252
- "The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed.","The store's base currency is {$storeCurrency}. Only %s is allowed as currency. No currency conversion will be proceed."
253
- "Category","Category"
254
- "ricardo.ch Category","ricardo.ch Category"
255
- "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)"
256
- "Select ricardo.ch Category","Select ricardo.ch Category"
257
- "Select the category","Select the category"
258
- "Type of sales","Type of sales"
259
- "Start price","Start price"
260
- "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95."
261
- "Increment","Increment"
262
- "Currency","Currency"
263
- "Allow Direct Buy","Allow Direct Buy"
264
- "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1."
265
  "Source","Source"
266
- "Price Change","Price Change"
267
- "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used."
268
- "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price."
269
- "If not correctly defined, the minimum and maximum values will be automatically set.","If not correctly defined, the minimum and maximum values will be automatically set."
270
- "Schedule","Schedule"
271
- "Start","Start"
272
- "Starting date must start minimum in one hour and maximum 30 days in the future.","Starting date must start minimum in one hour and maximum 30 days in the future."
273
- "Start immediately","Start immediately"
274
- "Start from","Start from"
275
- "End","End"
276
- "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date."
277
- "End after %s days","End after %s days"
278
- "End on","End on"
279
- "Reactivation","Reactivation"
280
  "Cycle","Cycle"
281
- "Cycle to publish multiple products %s minutes after the first publish","Cycle to publish multiple products %s minutes after the first publish"
282
- "Randomly published","Randomly published"
283
- "Overwrite all products starting date","Overwrite all products starting date"
284
- "Product Condition","Product Condition"
285
- "Default Condition","Default Condition"
286
- "Condition Product Source","Condition Product Source"
287
- "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined."
288
- "Warranty","Warranty"
289
- "Warranty description German","Warranty description German"
290
- "Characters %s. Max. 5 000 characters","Characters %s. Max. 5 000 characters"
291
- "Warranty description French","Warranty description French"
292
- "Stock Management","Stock Management"
293
- "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value."
294
- "Use product inventory","Use product inventory"
295
- "Use custom qty","Use custom qty"
296
- "Customization","Customization"
297
- "Template","Template"
298
- "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales""."
299
  "Promotion","Promotion"
300
- "Privilege Space","Privilege Space"
301
- "Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
302
- "Home Privilege Space","Home Privilege Space"
303
- "Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>"
304
- "Home Space","Home Space"
305
- "These options will not be activated for products having no picture.","These options will not be activated for products having no picture."
306
- "Until sold","Until sold"
307
- "Listed items cannot be modified. Stop the listing first to make changes.","Listed items cannot be modified. Stop the listing first to make changes."
308
- "Back to the list ""%s""","Back to the list ""%s"""
309
- "Configure product '%s'","Configure product '%s'"
310
- "Configure all %s selected products","Configure all %s selected products"
311
- "No ricardo.ch category found","No ricardo.ch category found"
312
- "Give a name","Give a name"
313
- "Select a website","Select a website"
314
- "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension."
315
- "Cancel","Cancel"
316
- "Listed products:","Listed products:"
317
- "Not listed products:","Not listed products:"
318
- "Add Product(s) from category","Add Product(s) from category"
319
- "Add Product(s)","Add Product(s)"
320
- "Stop","Stop"
321
- "Remove article listed on ricardo.ch","Remove article listed on ricardo.ch"
322
- "Check & List","Check & List"
323
- "Check & list only pending & error items","Check & list only pending & error items"
324
- "List","List"
325
- "List only ""Ready to list"" items","List only ""Ready to list"" items"
326
- "Edit Products Listing '%s'","Edit Product Listing '%s'"
327
- "New Products Listing","New Product Listing"
328
- "Websites","Websites"
 
329
  "Total","Total"
330
- "Edit","Edit"
331
- "Relist","Relist"
332
- "Stop List","Stop List"
333
- "View Logs","View Logs"
334
- "Change status","Change status"
335
- "Delete","Delete"
336
- "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed""","Are you sure that you want to delete this/these products listing(s)? Be aware it\'s only possible when the listing is ""Listed"""
337
- "Products Listing Log ""%s""","Products Listing Log ""%s"""
338
- "Edit ""%s""","Edit ""%s"""
339
  "Job ID","Job ID"
340
- "Listing ID","Listing ID"
341
- "Listing Title","Listing Title"
342
- "Product title","Product title"
343
  "Message","Message"
344
- "Created at","Created at"
345
- "Are you sure that you want to delete this/these log(s)?","Are you sure that you want to delete this/these log(s)?"
346
- "Job Type","Job Type"
347
- "Job Message","Job Message"
348
- "Current Progress","Current Progress"
349
- "Started at","Started at"
350
- "Ended at","Ended at"
351
- "Are you sure that you want to delete this/these job(s)?","Are you sure that you want to delete this/these job(s)?"
352
- "Show Products Listing","Show Products Listing"
353
- "Listing","Listing"
354
- "Synchronization","Synchronization"
355
- "Orders","Orders"
356
  "Transactions %s","Transactions %s"
357
- "You may also access to the %s content of this page</a> in a new window.","You may also access to the %s content of this page</a> in a new window."
358
- "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s""."
359
- "No ricardo.ch API Authorization have been found for the website ""%s"".","No ricardo.ch API Authorization have been found for the website ""%s""."
360
- "You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."
361
- "To hide this message, you have to <a href=""%s"">disable the extension</a>.","To hide this message, you have to <a href=""%s"">disable the extension</a>."
362
- "The Official ricardo.ch Extension has been installed.","The Official ricardo.ch Extension has been installed."
363
- "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API."
364
- "Latest message for the selected job","Latest message for the selected job"
365
- "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Edit</a> your products listing if needed"
366
- "No message found.","No message found."
367
- "Confirm","Confirm"
368
- "More Views","More Views"
369
- "%s days 0:0:0","%s days 0:0:0"
370
- "Starting price","Starting price"
371
- "Place a bit","Place a bit"
372
- "Quantity","Quantity"
373
- "of %s","of %s"
374
- "Details","Details"
375
- "Ending date:","Ending date:"
376
- "Availability:","Availability:"
377
- "Product condition:","Product condition:"
378
- "Payment information:","Payment information:"
379
- "Shipping Method (CH):","Shipping Method (CH):"
380
  "Description","Description"
381
- "Payment, Shipping, Warranty","Payment, Shipping, Warranty"
382
- "Payment information","Payment information"
383
- "Payment Methods:","Payment Methods:"
384
- "Payment Description:","Payment Description:"
385
- "Shipping","Shipping"
386
- "Shipping Price:","Shipping Price:"
387
- "Shipping Availability:","Shipping Availability:"
388
- "Shipping Description (CH):","Shipping Description (CH):"
389
- "You must select a ricardo.ch Category if you set this option","You must select a ricardo.ch Category if you set this option"
390
- "The task will start few minutes","The task will start few minutes"
391
- "No progress","No progress"
392
- "The product list has been stopped.","The product list has been stopped."
393
-
394
- "ricardo.ch Lifetime Sales","ricardo.ch Gesamtumsatz"
395
- "Turnover per month","Umsatz pro Monat"
396
- "Best Sellers","Meistverkaufte Produkte"
397
- "Qty sold", "Menge Verkauft"
398
- "Product Name","Produktname"
399
  "SKU","SKU"
400
- "Price","Preis"
401
- "Your ricardo.ch API Token","Ihre ricardo.ch API Token"
402
-
403
- "PREMIUMCATEGORYBRONZE", "Small"
404
- "PREMIUMCATEGORYSILVER", "Medium"
405
- "PREMIUMCATEGORYGOLD", "Big"
406
-
407
- "TYPE_BANK_TRANSFER", "Bank transfer"
408
- "TYPE_CASH", "Cash"
409
- "TYPE_CREDIT_CARD", "Credit Card via ricardo.ch"
410
- "TYPE_OTHER", "Other payment method"
411
-
412
- "UNKNOWNPROPERTY","Unknow Property"
413
- "CUSTOMERNOTARTICLEOWNER","The current customer can't act on the article as he's not the owner "
414
- "CHECKPASSWORDWRONGPASSWORD","The CheckPassword is used with a wrong password "
415
- "CHECKPASSWORDBLACKLISTEDIP","The CheckPassword is used with a blacklisted IP "
416
- "CHECKPASSWORDBANNEDCUSTOMER","The CheckPassword is used with a bannished Customer, additional info contains the date since when the user is bannished as Datetime "
417
- "CHECKPASSWORDCLOSEDCUSTOMER","The CheckPassword is used with a closed customer, additional info contains the date since when the user is closed as Datetime "
418
  "LOGADMINFAILED","Admin login failed "
419
  "TOKENERROR","Token error for API "
420
  "TOKENEXPIRED","Token expired for API "
@@ -431,7 +420,6 @@
431
  "ACCOUNTCLOSED","The account linked to the customer has been closed"
432
  "METHODNOTALLOWED","The Partnership used is not allowed to use this method"
433
  "TOKEN_AUTHORIZATION","The authorization of the token must be again requested"
434
-
435
  "CLOSEAUCTIONFAILED","Failed to close the auction"
436
  "CLOSECLASSIFIEDFAILED","Failed to close a classified article"
437
  "DELETEPLANNEDFAILED","Failed to delete planned article"
@@ -445,7 +433,6 @@
445
  "ARTICLESAMOUNTLIMIT","Limit for amount of articles per 1 push is 100 "
446
  "LISTOFARTICLESEMPTY","list of article empty"
447
  "UNKNOWNCATEGORYNAME","Category name specified is unknown"
448
-
449
  "EMPTYCOUNTRYID","EMPTYCOUNTRYID"
450
  "EMPTYPARTNERID","EMPTYPARTNERID"
451
  "EMPTYCATEGORY","EMPTYCATEGORY"
@@ -581,7 +568,6 @@
581
  "PAYMENTMETHODNEEDALTERNATEONE","PAYMENTMETHODNEEDALTERNATEONE"
582
  "WRONGPAYMENTMETHODS","WRONGPAYMENTMETHODS"
583
  "CUMULATIVESHIPPINGNOTALLOWED","CUMULATIVESHIPPINGNOTALLOWED"
584
-
585
  "MAXPICTURESCOUNTREACHED","MAXPICTURESCOUNTREACHED"
586
  "MAXPICTURESIZEREACHED","MAXPICTURESIZEREACHED"
587
  "ERRORRESIZINGPICTURE","ERRORRESIZINGPICTURE"
@@ -591,8 +577,7 @@
591
  "INVALIDPICTUREINDEX","INVALIDPICTUREINDEX"
592
  "MAXLOGOPICTURESIZEREACHED","MAXLOGOPICTURESIZEREACHED"
593
  "ERRORRESIZINGLOGOPICTURE","ERRORRESIZINGLOGOPICTURE"
594
-
595
- "NOTALLOWEDTOSELL","Produit non autorisé à la vente"
596
  "BILLINGERROR","BILLINGERROR"
597
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
598
  "NEEDTOCHANGEPASSWORDERROR","NEEDTOCHANGEPASSWORDERROR"
@@ -654,15 +639,40 @@
654
  "EMPTYMEMBERPREFERENCES","EMPTYMEMBERPREFERENCES"
655
  "EMPTYADDRESSES","EMPTYADDRESSES"
656
  "UNABLETOINSERT","UNABLETOINSERT"
657
- "CREDITLIMITEXCEEDED","Credit limit exceeded. Please contact ricardo.ch"
658
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
659
-
660
- "No Options because API is not configured","No Options because API is not configured"
661
- "No Options because API has a problem","No Options because API has a problem"
662
- "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.", "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
663
- "Security error occurred with the ricardo API. Please, check your log files.", "Security error occurred with the ricardo API. Please, check your log files."
664
- "Error occurred with the API. Check if the API is correctly configured: %s","Error occurred with the API. Check if the API is correctly configured: %s"
665
- "Product Price of %s CHF is incorrect. Minimum price is %s.","Product Price of %s CHF is incorrect. Minimum price is %s."
666
- "You cannot reactivate a product until sold out when doing an auction sales type.","You cannot reactivate a product until sold out when doing an auction sales type."
667
- "Following error(s) appeared:","Following error(s) appeared:"
668
- "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  "ricardo.ch","ricardo.ch"
2
+ "Dashboard","Tableau de bord"
3
+ "Products Listing","Liste de produits"
4
+ "Logs","Journaux"
5
+ "ricardo.ch Assistant","Assistant ricardo.ch"
6
  "Configuration","Configuration"
7
+ "Ricento by Diglin GmbH","Ricento par Diglin GmbH"
8
+ "Log","Journal"
9
+ "ricardo.ch Payment Methods","Méthodes de paiement ricardo.ch"
10
+ "ricardo.ch Shipping","Livraison ricardo.ch"
11
+ "Admin Email Notification","Email de notification Admininistrateur "
12
+ "Private message","Message privé"
13
+ "Global Configuration","Configuration Global"
14
+ "Merge Order","Combiner les commandes"
15
+ "If a customer order several products in a period of 30 minutes, do you want to merge the ricardo transaction in one order?","Si un client commande plusieurs produits dans une période de 30 minutes, voulez-vous combiner les transactions de ricardo.ch en une seule commande ?"
16
+ "Shipping Calculation","Calculation des frais de livraison"
17
+ "You can decide how do you want to calculate the shipping cost when an order merge several bought products by a customer.<br>""Highest Price"": it will find which product has the highest cost for the shipping and will take only this one for the calculation.<br>""Cumulative"": it will calculate the shipping cost based on the configuration you did in the products listing for each article and will combine them.","Vous pouvez décider comment calculer les frais de livraisons lorsqu'une commande combine plusieurs produits d'un même client. <br>""Prix le plus haut"": le prix sera déterminé par rapport au produit qui a les frais de livraison les plus élevés. Seulement ce prix sera utilisé pour le calcul.<br>""Cumulatif"": les frais seront calculé en fonction de ce que vous aurez configuré pour les frais de livraison dans la liste de produits pour chaque article et calculera la somme totale."
18
+ "Send Account Creation Confirmation Email","Envoyer un email de création de compte"
19
+ "Do you want to send a confirmation email to a customer when his account is created thanks to the ricardo.ch API?","Voulez-vous envoyer un email de confirmation de création de compte à vos clients lorsuq'ils sont importés depuis ricardo.ch ?"
20
+ "Send Email for new order","Envoyer un email pour les nouvelles commandes"
21
+ "Do you want to send the newly order created by email to a customer when the order is created thanks to the ricardo.ch API?","Voulez-vous envoyer un email de confirmation de création de commande à vos clients lorsuq'ils sont importés depuis ricardo.ch ?"
22
+ "API Token Configuration","Configuration du Token"
23
+ "General API Config","Configuration générale de l'API"
24
+ "ricardo.ch Extension enabled","Extension ricardo.ch activé"
25
+ "Development Mode","Mode Dévelopeur"
26
+ "If you enable this configuration, all API requests will be send to the ricardo.ch Sandbox instead to use the production servers. Be aware, you have to provide others partner Keys and Passwords specific for dev environment below.","Si vous activez cette configuration, toutes les requêtes vers l'API de ricardo.ch seront envoyées vers l'environnement de test de ricardo.ch au lieu d'utiliser les serveurs de production. A utiliser en cas de nouvelle installation."
 
 
 
 
 
 
27
  "Debug","Debug"
28
+ "Write into the var/log/ricento.log file all requests sent to the ricardo.ch API. Enable it to help us to support you and send this file to us if you have an issue. Your passwords will be anonymized. Attention: the file size can grow quite fast.","Ecrit dans le fichier var/log/ricento.log toutes les requêtes envoyées à ricardo.ch. Activez cette option pour nous aider à vous assister et envoyez nous le fichier si vous avez un problème. Vos mots de passe seront anonymes. Attention, ce fichier peut devenir très lourd. "
29
+ "German API Token","Token API Allemand"
30
+ "PROD German Partner Key","PROD Partner Key Allemand"
31
+ "Partner Key has the following format '0F12345-1234-1234-1234-1234567890'. You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Le Partner Key a le format suivant '0F12345-1234-1234-1234-1234567890'. Vous devez contacter ricardo.ch pour obtenir cette information. Veuillez cliquer sur le bouton orange "Obtenir une clé API" en haut de cette page pour contacter ricardo.ch."
32
+ "PROD German Partner Password","PROD Partner Password Allemand"
33
+ "You have to sign up to the ricardo.ch API to get this information. Click on the button at the top of this page","Le Partner Key a le format suivant '0F12345-1234-1234-1234-1234567890'. Vous devez contacter ricardo.ch pour obtenir cette information. Veuillez cliquer sur le bouton orange "Obtenir une clé API" en haut de cette page pour contacter ricardo.ch."
34
+ "DEV German Partner Key","DEV Partner Key Allemand"
35
+ "DEV German Partner Password","DEV Partner Password Allemand"
36
+ "French API Token","API Token Français"
37
+ "PROD French Partner Key","PROD Partner Key Français"
38
+ "PROD French Partner Password","PROD Partner Password Français"
39
+ "DEV French Partner Key","DEV Partner Key Français"
40
+ "DEV French Partner Password","DEV Partner Password Français"
41
+ "Cleanup Synchronization Jobs Log","Nettoyage des journaux de synchronization"
42
+ "Enabled","Activé"
43
+ "Keep for X days","Garder X jours"
44
+ "Cleanup Listings Log","Nettoyage des journaux des ""Listings"""
45
+ "ricardo.ch API Payment Methods","Méthodes de paiement de l'API ricardo.ch"
46
+ "Bank Transfer Instructions","Instructions pour les tranferts bancaires"
47
+ "Accepted Currency","Monnaies acceptées"
48
+ "Stock quantity set to 1 because auction sales type with direct buy option does not allow more than one article to be sold","La quantité de l'inventaire est mis à 1 car le type de vente par enchère avec vente directe n'autorise la vente que d'un article à la fois."
49
+ "Invalid start date.","Date de début invalide."
50
+ "The end date must be in the future.","La date de fin doit être dans le future."
51
+ "Listed listings cannot be modified. Stop the listing first to make changes.","Les listings déjà listé ne peuvent être modifiées. Veuillez arrêter le listing avant de pouvoir faire des changements."
52
+ "An error occurred while saving the configuration.","Une erreur s'est déroulée lors de la sauvegarde de la configuration."
53
+ "ricardo.ch Service Model doesn\'t exists.","ricardo.ch Service Model n'existe pas."
54
+ "ricardo.ch API Credentials are not configured. Please, configure the extension before to proceed.","Les informations de connexion à l'API de ricardo.ch ne sont pas configurées. Veuillez configurer l'extension avant de continuer."
55
  "API language provided for the Service Manager is not supported.","API language provided for the Service Manager is not supported."
56
+ "Error while trying to connect to the ricardo.ch API. Please, check your log files.","Une erreur s'est déroulée lors de la connexion à l'API de ricardo.ch. Veuillez vérifier vos fichiers de journalisation."
57
+ "The format of the token is invalid","Le format du token est invalide."
58
+ "The dispatcher of type '%s' is not found at %s.","Le dispatcher du type '%s' n'a pas été trouvé à %s."
59
  "Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract.","Dispatcher Class %s doesn't implements Diglin_Ricento_Model_Dispatcher_Abstract."
60
+ "The product has been sold","Le produit a été vendu."
61
+ "Customer creation failed! ricardo.ch transaction cannot be added.","La création du compte client a échoué! La transaction ricardo.ch ne peut être ajouté."
62
+ "Order automatically generated by the ricardo.ch Extension.","Commande automatiquement créé par l'extension ricardo.ch."
63
+ "Payment is pending","Le paiement est en attente."
64
+ "Payment has been completed on ricardo.ch side","Le paiement a été terminée du côté de ricardo.ch"
65
+ "Order canceled on ricardo.ch side","La commande a été annulée du côté de ricardo.ch"
66
+ "Country Code is not available. Please contact the author of this extension or support.","Le code pays n'est pas disponible. Veuillez contacter l'auteur de l'extension pour obtenir de l'aide."
67
+ "Report: %d success, %d warning(s), %d error(s)","Rapport: %d réussi(s), %d avertissements(s), %d erreur(s)"
68
+ "Successful products checked are going to be listed. To force to list products having a warning, please <a href=""%s"">clicking here</a>. Products with an error won't be synchronized, you have to fix the problem first.","Les produits vérifiés avec succès vont être listé. Pour forcer à lister les produits ayant reçu un avertissement, veuillez <a href=""%s"">cliquer ici</a>. Les produits ayant une erreur ne seront pas envoyés à ricardo.ch, vous devez tout d'abord corrigé le problème."
69
+ "The product is now live on ricardo.ch","Le produit est maintenant publié sur ricardo.ch"
70
+ "Sorry, the product has not been sold","Désolé, le produit n'a pas été vendu"
71
+ "This item is already listed or has already a ricardo article Id. No insert done to ricardo.ch","Cet élément est déjà listé ou a déjà un ricardi article ID. Aucune insertion pour cet élément vers ricrdo.ch"
72
+ "The product has been removed from ricardo.ch","Le produit a été retiré de ricardo.ch"
73
+ "The product has not been removed from ricardo.ch. Probably because someone bid the product or bought it.","Le produit n'a pu être retiré de ricardo.ch. Probablement à cause d'une enchère déjà faite ou que le produit a été vendu."
74
+ "Report: %d success, %d error(s)","Rapport: %d réussi(s), %d erreur(s)"
75
+ "errors","erreur"
76
+ "warnings","avertissement"
77
+ "success","réussi"
78
+ "The Job has finished with %s.","Le Job s'est terminé avec %s."
79
+ "Please, view the <a href=""%s"">log</a> for details.","Veuillez afficher le <a href=""%s"">journal</a> pour plus de détails."
80
+ "No item is ready for this job. No action has been done.","Aucun élément n'est prêt pour ce job. Aucune action n'a été entrepris."
81
+ "Error Code: %d","Code erreur: %d"
82
  "Notice","Notice"
83
+ "Success","Réussi"
84
+ "Error","Erreur"
85
+ "Warning","Avertissement"
86
+ "Product item checks","Vérification des produits"
87
+ "List product item to ricardo.ch","Lister les produits vers ricardo.ch"
88
+ "Stop product item to ricardo.ch","Stopper les produits de ricardo.ch"
89
+ "Default Values","Valeurs par défault"
90
+ "No package","Aucun paquet"
91
+ "-- Select Product Attribute --","-- Sélectionner l'attribut de produit--"
92
+ "-- Select Method --","-- Sélectionner la méthode --"
93
+ "No change","Aucun changement"
94
+ "Relative increase (+ %)","Augmentation relative (+ %)"
95
+ "Relative decrease (- %)","Dimuntion relative (- %)"
96
+ "Absolute increase (+)","Augmentation absolue (+)"
97
+ "Absolute decrease (-)","Diminution absolue (+)"
98
+ "None","Aucun"
99
+ "ricardo.ch Condition","Condition ricardo.ch"
100
+ "-- Please Select --","-- Veuillez sélectionner --"
101
+ "Auction","Enchère"
102
+ "Buy now","Vente directe"
103
+ "Highest Price","Prix le plus haut"
104
+ "Cumulative","Cumulatif"
105
+ "Pending","En attente"
106
+ "Running","En cours"
107
+ "Ready","Prêt"
108
+ "Completed","Terminé"
109
  "Products Check Job","Products Check Job"
110
  "List Job","List Job"
111
  "Stop List Job","Stop List Job"
113
  "Relist Job","Relist Job"
114
  "Update Job","Update Job"
115
  "Sync List Job","Sync List Job"
116
+ "-- Please select --","-- Veuillez sélectionner --"
117
+ "All languages","Toutes les langues"
118
+ "Listed","Listé"
119
+ "Stopped","Arrêté"
120
+ "Ready to list","Prêt à être listé"
121
+ "Check in progress...","Vérification en cours..."
122
+ "List in progress...","Listage en cours..."
123
+ "Job in progress...","Job en cours..."
124
+ "Product Title will be cut after %s characters when published on ricardo.ch for store ""%s""","Le titre du produit seraa coupè après %s caractères une fois publié sur ricardo.ch pour le magasin ""%s"""
125
+ "Product Subtitle will be cut after %s characters when published on ricardo.ch for store ""%s""","Le sous-titre du produit seraa coupè après %s caractères une fois publié sur ricardo.ch pour le magasin ""%s"""
126
+ "Product Description will be cut after %s characters when published on ricardo.ch for store ""%s""","La description du produit seraa coupè après %s caractères une fois publié sur ricardo.ch pour le magasin ""%s"""
127
+ "Custom Options are not supported. Those won\'t be synchronized into ricardo.ch.","Les options individuels ne sont pas supporté. Ils ne seront pas synchronisé vers ricardo.ch."
128
+ "The product or its associated products is/are not in stock or doesn\'t have enough quantity in stock.","Le produit ou ses produits associées ne sont pas suffisemment en stock."
129
+ "You MUST define a ricardo category for this product. Check that you set it at products listing level or at Magento category level.","vous DEVEZ définir une catégorie ricardo.ch pour ce produit. Veuillez vérifier au niveau de la liste de produit ou au niveau des catégories de Magento (consulter la documentation pour plus d'information)"
130
+ "Payment and/or Shipping combination are not correct.","La combinaison paiement et/ou livraison ne sont pas corrects."
131
+ "You cannot have a starting price for an auction of %2$s when you set a direct sales with a product price of %1$s.","Vous ne pouvez avoir un prix de départ pour une enchère de %2$s quand vous définissez un prix de vente de %1$s."
132
+ "Product Price of %s CHF is incorrect for a direct sales with credit card. Price must be between %s and %s.","Le prix du produit de %s CHF est incorrecte pour une vente directe. Le prix doit être entre %s et %s."
133
+ "The ending date is too early or too late. Minimum period allowed: %s days - Maximum period allowed: %s days","La date de fin se termine trop tôt ou trop tard. La période minimum autorisée est: %s jours - La période maximum autorisée est: %s jours"
134
+ "You cannot use the privilege spaces as you do not have any pictures for this product.","Vous ne pouvez bénéficier de l'offre privilège étant donné qu'aucune image n'a été trouové pour ce produit."
135
+ "This increment value is not possible for this start price.","La valeur d'incrémentation n'est pas possible pour ce prix de départ."
136
+ "Only the following combinations are possible:","Seul les combinaisons suivantes sont possibles:"
137
+ "Start price is between","Le prix de départ est entre"
138
+ "Increment must be between","L'incrément doit être"
139
+ "This payment method combination is not possible.","La combinaison de ces modes de paiement n'est pas possible."
140
+ "The following combinations are possible:","Les combinaisons suivantes sont possibles:"
141
+ "It is not possible to combine ""Other"" shipping method with ""Credit Card"" payment method","Il n'est pas possible de combiner le mode de livraison ""Autre"" avec le mode de paiement ""Carte de crédit""."
142
+ "No category will be displayed, the products listing doesn\'t exists. Please, close the window.","Aucune catégorie ne sera affiché, la liste de produits n'existe pas. Veuillez fermer cette fenêtre."
143
+ "You are not allowed to save the products listing, so you cannot add products from a category. Please, close the window.","Vous n'êtes pas autorisé de sauvegardé la liste de produits, et ne pouvez donc ajouté de produits de cette catégorie. Veuillez fermer cette fenêtre."
144
+ "Product(s) from the selected categories cannot be saved. The products listing doesn\'t exists.","Les produit(s) de la catégorie sélectionnée ne peuvent être sauvegardé. La liste de produits n'existent pas."
145
+ "You are not allowed to save the products listing, so you cannot add products from a category.","Vous n'êtes pas autorisé de sauvegardé la liste de produits, et ne pouvez donc ajouté de produits de cette catégorie."
146
+ "%d product(s) added to the listing","%d produit(s) ajouté à la liste"
147
+ "Error occurred while saving the product(s) from the selected categories. Please check your exception log.","Une erreur s'est déroulée lors de la sauvegarde des produit(s) des catégories sélectionnées. Veuillez vérifier vos fichiers de journalisation."
148
+ "The action you try to do, is not possible. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","L'action que vous essayez de faire, n'est pas autorisée. Vous devez autoriser le token de l'API Veuillez visiter la page <a href=""%s"">d'autorisation de ricardo.ch </a> pour effectuer le processus d'autorisation."
149
+ "Listing name and website must be specified.","Le nom de la liste de produits et le site web doivent être définis."
150
+ "We have detected and set for you the language configuration. Please, review it before to go further.","Nous avons détecté et mis en place la configuration pour les langues de votre site. Veuillez les vérifier avant de continuer le reste de la configuration."
151
+ "The listing has been saved.","La liste des produits a été sauvegardée"
152
+ "An error occurred while saving the listing.","Une erreur s'est déroulée lors de la sauvegarde de la liste des produits"
153
+ "Listed listings cannot be deleted. Stop the listing first.","Les listings déjà listé ne peuvent être effacés. Veuillez arrêter tout d'abord le listing."
154
+ "Listing deleted","Liste de produit effacée"
155
+ "%d products removed from listing","%d produits supprimés de la liste de produits"
156
+ "%d products are listed and could not be removed","%d produits sont listé et ne peuvent être supprimés"
157
+ "The API token and configuration are not ready to allow this action. Please, check that your token is enabled and not going to expire.","Le token de l'API and la configuration ne sont pas prêt pour autoriser cette action. Veuillez vérifier que le token est activé et qu'il ne va pas expiré."
158
+ "A similar job is already running. This job won\'t be executed.","Un job est en cours d'exécution. Ce job ne peut être lancé pour le moment."
159
+ "It\'s s not possible to start this job. You must authorize the API token. Please, go the <a href=""%s"">ricardo.ch Authorization</a> page to do the authorization process","Il n'est pas possible de démarrer ce job. Vous devez autoriser le token de l'API Veuillez visiter la page <a href=""%s"">d'autorisation de ricardo.ch </a> pour effectuer le processus d'autorisation."
160
+ "An error occurred while starting this job. Please check your log file.","Une erreur s'est déroulée lors du démarrage du job. Veuillez vérifier vos fichiers de journalisation."
161
+ "The job to check your products listing will start in few minutes. You can check the progression below.","Le job pour vérifier votre liste de produits démarrera dans quelques minutes. Vous pouvez vérifier la progression dessous."
162
+ "If it finishes with success, your products will be listed automatically otherwise you will have to choose if you want to keep going to list or fix potential issues.","Si cela se termine avec succès, les produits seront automatiquement publiés sinon vous devrez décider si vous souhaitez continuer à lister les produits ou corriger les problèmes éventuels."
163
+ "There is no product ready to be listed. Please, add products to your products listing ""%s"".","Il n'y a aucun produit prêt à être listé. Veuillez ajouté des produits à votre liste de produit ""%s""."
164
+ "There is no pending product to check.","Il n'y a aucun produit en attente à vérifier."
165
+ "The job to list your products listing will start in few minutes.","Le job pour lister votre liste de produits démarrera dans quelques minutes."
166
+ "You can check the progression below.","Vous pouvez vérifier la progression ci-dessous."
167
+ "There is no item to relist. Only products who have been sold on ricardo.ch can be relisted for the products listing %d.","Il n'y a aucun élément à relister. Seuls les produits qui ont été vendu sur ricardo.ch peuvent être relistés pour la liste des produits %d."
168
+ "Only listed product items can be stopped.","Seul les produits listés peuvent être arrêté."
169
+ "The job to stop to list your products will start in few minutes.","Le job pour arrêter votre liste de produits démarrera dans quelques minutes."
170
+ "Products listing(s) is/are successfully deleted.","La ou les liste(s) de produits a/ont été supprimé(s) avec succès."
171
+ "The following products listings IDs have not been deleted because they are still listed on ricardo.ch: %s","La ou les ID(s) de liste(s) de produit(s) suivante(s) n'ont pas été supprimés car ils sont encore listés sur ricardo.ch."
172
+ "An error occurred while trying to delete the products listing(s). Please, check your exception log.","Une erreur s'est déroulée lors de la suppression de la liste des produits. Veuillez vérifier vos fichiers de journalisation."
173
+ "No products selected.","Aucun produit séelctionné."
174
+ "The configuration has been saved successfully.","La configuration a été sauvegardée avec succès."
175
+ "An error occurred while saving the configuration. Please, check your log files for more details.","Une erreur s'est déroulée lors de la sauvegarde de la configuration. Veuillez vérifier vos fichiers de journalisation."
176
+ "It\'s just a preview. Please, be aware that the display on ricardo.ch might be slightly different.","C'est seulement une prévisualisatoin. L'affichage sur ricardo.ch sera probablement différent."
177
+ "Log(s) is/are successfully deleted.","Le ou les journaux (s) a/ont été supprimés avec succès."
178
+ "An error occurred while trying to delete the listing log(s). Please, check your exception log.","Une erreur s'est déroulée lors de la suppression de la ou les journaux des listes de produits. Veuillez vérifier vos fichiers de journalisation."
179
+ "Job(s) is/are successfully deleted.","Le ou les job(s) a/ont été supprimés avec succès."
180
+ "The following job IDs have not been deleted because they are still running: %s","La ou les ID(s) de job(s) n'ont pas été supprimés car ils sont en cours d'exécution."
181
+ "An error occurred while trying to delete the job(s). Please, check your exception log.","Une erreur s'est déroulée lors de la suppression de la ou les job(s). Veuillez vérifier vos fichiers de journalisation."
 
182
  "ricardo.ch API Signup","ricardo.ch API Signup"
183
  "API Signup","API Signup"
184
+ "ricardo.ch Assistant Portal","Portail ricardo.ch Assistant"
185
+ "Assistant Portal","Portail Assistant"
186
+ "Only Ajax call is allowed here.","Seul les appels ajax sont autorisés ici."
187
+ "The website code returned from ricardo.ch is not correct! Your authorization has not been saved on our side.","Le code du site web retourné par ricardo.ch est incorrect. Votre autorisation n'a pas été sauvegardé."
188
+ "Your ricardo.ch account has been authorized to get access to the API.","Votre compte ricardo.ch a été autorisé d'accès à l'API."
189
+ "An error occurred while saving the token. Please, check your log files.","Une erreur s'est déroulée lors de la sauvegarde du token. Veuillez vérifier vos fichiers de journalisation."
190
+ "Authorization was not successful on ricardo.ch side. Please, contact ricardo.ch to find out the reason.","L'autorisation ne s'est pas déroulé correctement du côté de ricardo.ch. Veuillez contacter ricardo.ch pour plus d'informations."
191
  "Sign Up to ricardo.ch API","Sign Up to ricardo.ch API"
192
+ "API Authorization","Autorisation API"
193
+ "No Selection","Aucune sélection"
194
+ "Open ricardo.ch Category Window","Ouvrir la fenêtre des catégories de ricardo.ch"
195
+ "Add products from selected categories","Ajouter des produits depuis les catégories sélectionnées."
196
+ "Only product types supported, enabled and not listed in other products listing will be added.","Les types de produits supportés, activés et non listés dans d'autres liste de produits seront ajoutés."
197
+ "Be aware, you have also to select the sub-categories, otherwise selecting only a top category won\'t allow to add products of its subcategories.","Veuillez sélectioner aussi les sous-catégories dont les produits appartiennent, sinon seuls les produits qui appartiennent à la catàégorie principale seront ajoutés, pas ceux des sous-catégories."
198
+ "Create new listing","Créer unen liste de produits"
199
+ "Show Synchronization Jobs","Afficher les Jobs de synchronization "
200
+ "General","Général"
201
+ "Products","Produits"
202
+ "Sales Options","Options de vente"
203
+ "Rules","Règles"
204
+ "Product ID","ID de produit"
205
+ "Name","Nom"
206
+ "Price","Prix"
207
  "Type","Type"
208
  "SKU","SKU"
209
+ "Inventory","Inventaire"
210
  "Status","Status"
211
  "Action","Action"
212
+ "Preview","Prévisualisation"
213
+ "Configure","Configurer"
214
+ "Remove","Supprimer"
215
+ "Are you sure to remove this/these product(s)?","Etes-vous sûr de vouloir supprimer ce/ces produit(s) ?"
216
+ "Remove from list","Supprimer de la liste"
217
+ "the sales options","Les options de vente"
218
+ "the shipping and payment rules","les règles de paiement et de livraison"
219
+ "This product has been configured for %s %s","Le produit a été configuré pour %s %s"
220
+ "The product has custom options, those will not be added to ricardo.ch!","Le produit a des options individuels, ceux-ci ne seront pas envoyées vers ricardo.ch"
221
  "ID","ID"
222
+ "Add selected product(s)","Ajouter le/les produit(s) sélectionné(s)"
223
+ "Title","Titre"
224
+ "Website","Site web"
225
+ "Language","Langue"
226
+ "Product languages to synchronize to ricardo.ch","Langues de produit à synchroniser vers ricardo.ch"
227
+ "ricardo.ch supports only two languages at the moment: German and French. You can set in which language you want to publish your product content (title, subtitle, description, etc).","ricardo.ch supporte que deux langues: Allemand et Français. Vous pouvez définir dans quelle langue vous souhaitez publier les informations de vos produits (tire, sous titre et description)"
228
+ "Default language to publish","Langue par défaut à publier"
229
+ "Which language to publish by default to ricardo.ch when the product content is not available in a language","Dans quelle langue publier vers ricardo.ch lorsque le contenu d'un produit n'est pas disponible dans une langue."
230
+ "Store View for %s","Vue magasin pour %s"
231
+ "Payment Methods","Mode de paiement"
232
+ "Payment Description German","Description de paiement Allemand"
233
+ "Characters: %s. Max. 5 000 characters. Payment information to display to customers. Will be send to ricardo only if you select the method ""Other""","Caractères: %s Max. 5000 caractères. Information de paiement à afficher aux clients. Sera envoyé vers ricardo.ch seulement si vous sélectionnez la méthode ""Autre"""
234
+ "Payment Description French","Description du paiement Français"
235
+ "Shipping Methods","Mode de livraison"
236
+ "Shipping Price","Frais de livraison"
237
+ "Free shipping","Livraison gratuite"
238
+ "Is Shipping fee cumulative","Est-ce que les frais de livraison sont cumulatifs ?"
239
+ "If you select this option, the shipping fee will be calculate for each sold product.","Si vous sélectionnez cette option, les frais de livraison seront calculés pour chaque produit vendu."
240
+ "e.g. an article is sold with a quantity of 3 to one customer and the shipping fee is 15 CHF. Total Shipping fee is 45 CHF. Let it empty if you don't such an option.","ex. un article est vendu dans une quantité de 3 pour un seul client and les frais de livraison sont de 15 CHF. Les frais de livraisons totaux seront de 45 CHF."
241
+ "Shipping Availability","Disponibilité"
242
+ "Shipping Description German","Description de la livraison Allemand"
243
+ "Characters: %s. Max. 5 000 characters","Caractères: %s. Max. 5 000 caractères"
244
+ "Shipping Description French","Description de la livraison Français"
245
+ "Category","Catégorie"
246
+ "ricardo.ch Category","Catégorie ricardo.ch"
247
+ "Use Magento / ricardo.ch Category mapping (if mapping does not exist, an error message will be triggered while preparing the synchronization to ricardo.ch)","Utiliser la foncitonnalité de mapping des catégories Magento / ricardo.ch (si le mapping n'existe pas, un message d'erreur sera affiché lors de la synchrnoisation vers ricardo.ch)"
248
+ "Select ricardo.ch Category","Sélectionnez la catégorie ricardo.ch"
249
+ "Select the category","Sélectionnez la catégorie"
250
+ "Type of sales","Type de vente"
251
+ "Start price","Prix de départ"
252
+ "Range from Fr. 0.05 to Fr. 1 000 000. If Credit card payment method available and enabled, the range is from Fr. 0.05 to Fr. 2 999.95.","Tranche de Fr. 0.05 à Fr. 1 000 000. Si le mode de paiement par carte de crédit est disponible et sélectionné, la tranche sera de Fr. 0.05 à Fr. 2 999.95."
253
+ "Increment","Incrément"
254
+ "Currency","Monnaie"
255
+ "Allow Direct Buy","Autoriser la vente directe"
256
+ "Fill in the fieldset ""Buy now"" below to define the direct price settings. <strong>Note</strong>: if set to ""Yes"", the stock management will be set to ""Custom Qty"" with a value of 1.","Remplissez l'ensemble des champs ""Vente directe"" ci-dessous pour définir les réglages des prix de vente. <strong>Note</strong>: Si défini sur ""Oui"", le nombre d'article autorisé à la mise en vente sera mise automatiquement à 1."
 
257
  "Source","Source"
258
+ "Price Change","Variation de prix"
259
+ "For Fixed Price articles, the minimum price is Fr. 0.05 and maximum Fr. 2 999.95 if the Credit Card payment method is used.","Pour les articles vendus en vente directe, le prix minimum est de Fr. 0.05 et maximum est de Fr. 2 999.95 si le mode de paiement par carte bancaire est utilisé."
260
+ "For Auction articles, the minimum amount is Fr. 0.1 and must be greater than the Start Price.","Pour les articles en vente par enchère, le montant minimum est de Fr. 0.1 et doit être supérieur au montant défini dans le ""Prix de départ"""
261
+ "If not correctly defined, the minimum and maximum values will be automatically set.","SI cela n'est pas définii correctement, les valeurs minimales et maximales seront définies automatiquement."
262
+ "Schedule","Plannification"
263
+ "Start","Début"
264
+ "Starting date must start minimum in one hour and maximum 30 days in the future.","La date de début doit être au minimum une heure et maxium 30 jours dans le future."
265
+ "Start immediately","Démarrer imméditatement"
266
+ "Start from","Démarrer à partir de"
267
+ "End","Terminer"
268
+ "Ending date must finish at the minimum in 24 hours and maximum 10 days from the starting date.","La date de fin doit être définie au minimum 24 heures et maximum 10 jours à partir de la date de départ."
269
+ "End after %s days","Terminé après %s jours"
270
+ "End on","Terminé le"
271
+ "Reactivation","Réactivation"
272
  "Cycle","Cycle"
273
+ "Cycle to publish multiple products %s minutes after the first publish","Cycle pour publier multiple products %s minutes après la première publication"
274
+ "Randomly published","Publié de manière aléatoire"
275
+ "Overwrite all products starting date","Surchager toutes les dates de début des produits."
276
+ "Product Condition","Condition du produit"
277
+ "Default Condition","Condition par défaut"
278
+ "Condition Product Source","Source des conditions des produits"
279
+ "Do you want to define the condition source from the ricardo.ch Condition Attribute if you defined it on product basis? Otherwise, if not found or you set here to ""No"", the default condition set above will be defined.","Voulez-vous définir la source des conditions depuis l'attribut de Condition de ricardo.ch que vous aurez préalablement défini dans votre catalogue de produit Magento? Si elle est vide ou non définie dans votre catalogue, la condition par défaut de vos produits sera celle indiquée ci-dessus."
280
+ "Warranty","Garrantie"
281
+ "Warranty description German","Description de la garantie Allemand"
282
+ "Characters %s. Max. 5 000 characters","Caractères: %s. Max. 5 000 caractères"
283
+ "Warranty description French","Description de la garantie Français"
284
+ "Stock Management","Gestion des stocks"
285
+ "Range 1...999. If you use the product inventory option, the amount of items will be taken from the field ""Qty"" defined in the product inventory and limited to 999 if you have a quantity above this value.","Tranche de 1...999. Si vous utilisez l'option "Inventaire du produit", la quantité d'articles sera pris depuis le champ ""Quantité"" définie dans l'inventaire du produit et limité à 999 si la quantité est au-delà de la valeur autorisée."
286
+ "Use product inventory","Utilisez l'inventaire du produit"
287
+ "Use custom qty","Utilisez une quantité personnalisée"
288
+ "Customization","Personnalisation"
289
+ "Template","Modèle"
290
+ "To create one go to your <a onclick=""window.open(\'%s\')"">ricardo.ch account</a> into ""My Sales"".","Pour créer un modèle, visiter votre <a onclick=""window.open(\'%s\')"">compte ricardo.ch</a> et ""Mes ventes""."
291
  "Promotion","Promotion"
292
+ "Privilege Space","Espace privilège"
293
+ "PREMIUMHOMEPAGE","Espace privilège"
294
+ "Privilege space on main category page and search results. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Espace privilégié sur la page catégorie principale et des résultats de recherche. Plus d'informations<a onclick=\"window.open('%s');\">ici</a>"
295
+ "Home Privilege Space","Espace privilège sur la page d'accueil"
296
+ "Privilege space on the homepage. More information about this feature <a onclick=\"window.open('%s');\">here</a>","Espace privilégié sur la page sur la page d'accueil. Plus d'informations <a onclick=\"window.open('%s');\">ici</a>"
297
+ "Home Space","Espace privilège Accueil"
298
+ "These options will not be activated for products having no picture.","Ces options ne seront pas activés pour les produits n'ayant pas d'image."
299
+ "Until sold","Jusqu'à la vente"
300
+ "Listed items cannot be modified. Stop the listing first to make changes.","Les produits déjà listés ne peuvent être modifiés. Vous devez arrêter la liste avant de pouvoir faire des changements."
301
+ "Back to the list ""%s""","Retour vers la liste ""%s"""
302
+ "Configure product '%s'","Configurer le produit '%s'"
303
+ "Configure all %s selected products","Configurer tous les %s produits sélectionnés"
304
+ "No ricardo.ch category found","Aucune catégorie ricardo.ch"
305
+ "Give a name","Donner un nom"
306
+ "Select a website","Sélectionner un site web"
307
+ "The website(s) must be configured and enabled for this extension. If this field is empty or some are missing please <a href=""%s"">configure</a> the extension.","Le site web doit être configuré et activé pour cette extension. Si ce champ est vide ou certains sont manquants, veuillez <a href=""%s"">configurer</a> l'extension"
308
+ "Cancel","Annuler"
309
+ "Listed products:","Porduit listés:"
310
+ "Not listed products:","Produits non listés:"
311
+ "Add Product(s) from category","Ajouter des produits depuis une catégorie"
312
+ "Add Product(s)","Ajouter les produits"
313
+ "Stop","Arrêter"
314
+ "Remove article listed on ricardo.ch","Arrêter les articles listés sur ricardo.ch"
315
+ "Check & List","Vérifier et lister"
316
+ "Check & list only pending & error items","Vérifier et lister seulement les articles ayant des avertissements ou des erreurs"
317
+ "List","Lister"
318
+ "List only ""Ready to list"" items","Lister seulement les articles ""Prêt à être listé"""
319
+ "Edit Products Listing '%s'","Editer la liste de produits '%s'"
320
+ "New Products Listing","Nouvelle liste de produits"
321
+ "Websites","Site web"
322
  "Total","Total"
323
+ "Edit","Editer"
324
+ "Relist","Relister"
325
+ "Stop List","Arrêter la liste"
326
+ "View Logs","Voir les journaux"
327
+ "Change status","Changer le status"
328
+ "Delete","Supprimer"
329
+ "Are you sure that you want to delete this/these products listing(s)? Be aware it\'s not possible when the listing is ""Listed""","Etes-vous sûr de vouloir supprimer cette/ces liste(s) de produit? Il n'est pas possible de supprimé une liste déjà listé"
330
+ "Products Listing Log ""%s""","Journal de la liste de produits ""%s"""
331
+ "Edit ""%s""","Editer ""%s"""
332
  "Job ID","Job ID"
333
+ "Listing ID","ID de la liste"
334
+ "Listing Title","Titre de la liste"
335
+ "Product title","Titre du produit"
336
  "Message","Message"
337
+ "Created at","Créé le"
338
+ "Are you sure that you want to delete this/these log(s)?","Ets-vous sûr de vouloir effacer ces journaux?"
339
+ "Job Type","Type de job"
340
+ "Job Message","Message du job"
341
+ "Current Progress","Progression en cours"
342
+ "Started at","Démarré le"
343
+ "Ended at","Terminé le"
344
+ "Are you sure that you want to delete this/these job(s)?","Ets-vous sûr de vouloir effacer ces jobs?"
345
+ "Show Products Listing","Afficher la liste de produits"
346
+ "Listing","Liste"
347
+ "Synchronization","Synchronisation"
348
+ "Orders","Commandes"
349
  "Transactions %s","Transactions %s"
350
+ "You may also access to the %s content of this page</a> in a new window.","Vous pouvez avoir accès au contenu %s de cette page</a> dans une nouvelle fenêtre"
351
+ "Your ricardo.ch API token credentials are going to expire in %s days for the website ""%s"".","Votre ricardo.ch token API va expiré dans %s jours pour le site web ""%s""."
352
+ "No ricardo.ch API Authorization have been found for the website ""%s"".","Aucune autorisation pour l'API de ricardo.ch n'a été trouvé pour le site web ""%s""."
353
+ "You have to authorize your account to get access to the ricardo.ch API thanks to the <a href=""%s"">ricardo.ch Authorization Page</a>. If you don't do it, your ricardo.ch extension and all related transactions with ricardo.ch will be blocked."," Vous devez autoriser votre compte pour pouvoir avoir accès à l'API de ricardo.ch grâce à la page d'<a href=""%s"">Authorization </a>. Si vous ne le faites pas, votre extension ricardo.ch et toutes les transactions en cours seront blockés."
354
+ "To hide this message, you have to <a href=""%s"">disable the extension</a>.","Pour cacher ce message, vous devez <a href=""%s"">désactiver l'extension</a>."
355
+ "The Official ricardo.ch Extension has been installed.","L'extension officielle ricardo.ch a été installée."
356
+ "Please, click <a href=""%s"">here to configure</a> the access to the ricardo.ch API.","Veuillez cliquer <a href=""%s"">ici pour configurer</a> l'accès à l'API de ricardo.ch"
357
+ "Latest message for the selected job","Dernier message du job sélectionné."
358
+ "<a href=""%s"">Edit</a> your products listing if needed","<a href=""%s"">Editer</a> votre liste de produits si besoin."
359
+ "No message found.","Aucun message trouvé"
360
+ "Confirm","Confirmer"
361
+ "More Views","Plus de vues"
362
+ "%s days 0:0:0","%s jours 0:0:0"
363
+ "Starting price","Prix de départ"
364
+ "Place a bit","Faire une offre"
365
+ "Quantity","Quantité"
366
+ "of %s","de %s"
367
+ "Details","Détails"
368
+ "Ending date:","Date de fin :"
369
+ "Availability:","Disponibilité :"
370
+ "Product condition:","Condition du produit :"
371
+ "Payment information:","Information de paiement :"
372
+ "Shipping Method (CH):","Mode de livraison (CH) :"
373
  "Description","Description"
374
+ "Payment, Shipping, Warranty","Paiement, Livraison, Garrantie"
375
+ "Payment information","Information de paiement"
376
+ "Payment Methods:","Mode de paiement"
377
+ "Payment Description:","Description du paiement:"
378
+ "Shipping","Livraison"
379
+ "Shipping Price:","Frais de livraison:"
380
+ "Shipping Availability:","Disponiblité:"
381
+ "Shipping Description (CH):","Description de la livraison(CH):"
382
+ "You must select a ricardo.ch Category if you set this option","Vous devez sélectionner une catégorie ricardo.ch si vous sélectionnez cette option"
383
+ "The task will start few minutes","La tâche commencera dans quelques minutes"
384
+ "No progress","Aucune progression"
385
+ "The product list has been stopped.","La liste des produits a été arrêtée"
386
+ "ricardo.ch Lifetime Sales","Ventes totales sur ricardo.ch"
387
+ "Turnover per month","Chiffre d'affaire par mois"
388
+ "Best Sellers","Meilleurs ventes"
389
+ "Qty sold","Qte vendues"
390
+ "Product Name","Nom du produit"
 
391
  "SKU","SKU"
392
+ "Price","Prix"
393
+ "Your ricardo.ch API Token","Votre token API ricardo.ch"
394
+ "PREMIUMCATEGORYBRONZE","Petite"
395
+ "PREMIUMCATEGORYSILVER","Moyenne"
396
+ "PREMIUMCATEGORYGOLD","Grande"
397
+ "TYPE_BANK_TRANSFER","Virement"
398
+ "TYPE_CASH","Cash"
399
+ "TYPE_CREDIT_CARD","Carte de crédit via ricardo.ch"
400
+ "TYPE_OTHER","Autre mode de paiement"
401
+ "UNKNOWNPROPERTY","Propriété inconnue"
402
+ "CUSTOMERNOTARTICLEOWNER","Le client courant ne peut agir sur l'article car il n'est pas le propriétaire "
403
+ "CHECKPASSWORDWRONGPASSWORD","Le CheckPassword est utilisé avec un mauvais mot de passe "
404
+ "CHECKPASSWORDBLACKLISTEDIP","Le CheckPassword est utilisé avec une IP blacklisté "
405
+ "CHECKPASSWORDBANNEDCUSTOMER","Le CheckPassword est utilisé avec un client banni, les informations additionnelles contiennent la date à partir de laquelle celui-ci a été banni. "
406
+ "CHECKPASSWORDCLOSEDCUSTOMER","Le CheckPassword est utilisé avec un client clôturé, les informations additionnelles contiennent la date à partir de laquelle celui-ci a été clôturé. "
 
 
 
407
  "LOGADMINFAILED","Admin login failed "
408
  "TOKENERROR","Token error for API "
409
  "TOKENEXPIRED","Token expired for API "
420
  "ACCOUNTCLOSED","The account linked to the customer has been closed"
421
  "METHODNOTALLOWED","The Partnership used is not allowed to use this method"
422
  "TOKEN_AUTHORIZATION","The authorization of the token must be again requested"
 
423
  "CLOSEAUCTIONFAILED","Failed to close the auction"
424
  "CLOSECLASSIFIEDFAILED","Failed to close a classified article"
425
  "DELETEPLANNEDFAILED","Failed to delete planned article"
433
  "ARTICLESAMOUNTLIMIT","Limit for amount of articles per 1 push is 100 "
434
  "LISTOFARTICLESEMPTY","list of article empty"
435
  "UNKNOWNCATEGORYNAME","Category name specified is unknown"
 
436
  "EMPTYCOUNTRYID","EMPTYCOUNTRYID"
437
  "EMPTYPARTNERID","EMPTYPARTNERID"
438
  "EMPTYCATEGORY","EMPTYCATEGORY"
568
  "PAYMENTMETHODNEEDALTERNATEONE","PAYMENTMETHODNEEDALTERNATEONE"
569
  "WRONGPAYMENTMETHODS","WRONGPAYMENTMETHODS"
570
  "CUMULATIVESHIPPINGNOTALLOWED","CUMULATIVESHIPPINGNOTALLOWED"
 
571
  "MAXPICTURESCOUNTREACHED","MAXPICTURESCOUNTREACHED"
572
  "MAXPICTURESIZEREACHED","MAXPICTURESIZEREACHED"
573
  "ERRORRESIZINGPICTURE","ERRORRESIZINGPICTURE"
577
  "INVALIDPICTUREINDEX","INVALIDPICTUREINDEX"
578
  "MAXLOGOPICTURESIZEREACHED","MAXLOGOPICTURESIZEREACHED"
579
  "ERRORRESIZINGLOGOPICTURE","ERRORRESIZINGLOGOPICTURE"
580
+ "NOTALLOWEDTOSELL","Product Not allowed to be sold"
 
581
  "BILLINGERROR","BILLINGERROR"
582
  "GETCUSTOMERERROR","GETCUSTOMERERROR"
583
  "NEEDTOCHANGEPASSWORDERROR","NEEDTOCHANGEPASSWORDERROR"
639
  "EMPTYMEMBERPREFERENCES","EMPTYMEMBERPREFERENCES"
640
  "EMPTYADDRESSES","EMPTYADDRESSES"
641
  "UNABLETOINSERT","UNABLETOINSERT"
642
+ "CREDITLIMITEXCEEDED","Limite de crédit excédé. Veuillez contacter ricardo.ch"
643
  "ACTIVATIONCODESTATUSMANUALLYBLOCKED","ACTIVATIONCODESTATUSMANUALLYBLOCKED"
644
+ "No Options because API is not configured","Aucune option car l'API n'est pas configuré."
645
+ "No Options because API has a problem","Aucune option car l'API a un problème"
646
+ "Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>.","Security error occurred with the ricardo API. Please, check your log files and your <a href=""%s"">API configuration</a>."
647
+ "Security error occurred with the ricardo API. Please, check your log files.","Security error occurred with the ricardo API. Please, check your log files."
648
+ "Error occurred with the API. Check if the API is correctly configured: %s","Une erreur s'est déroulée avec l'API. Vérifier is l'API est correctement configuré: %s"
649
+ "Product Price of %s CHF is incorrect. Minimum price is %s.","Le prix du produit de %s CHF est incorrect. Prix minimu est %s."
650
+ "You cannot reactivate a product until sold out when doing an auction sales type.","Vous ne pouvez réactiver un produit juqu'à sa vente si vous avez configuré le type de vente par enchère."
651
+ "Following error(s) appeared:","Les erreurs suivantes sont apparues:"
652
+ "<strong>Attention:</strong> you cannot use the option ""Until sold"" if you select the Sales Type ""Auction""","<strong>Attention:</strong> vous ne pouvez pas utiliser l'option ""Jusqu'à la vente"" si vous sélectionnez le type de vente par ""Enchère"""
653
+ "The authorization of the ricardo.ch API Token can be done only %s before the expiration. You will receive automatically an email when it will be possible.","Le renouvellement de l'autorisation de l'API ricardo.ch ne peut être fait que %s jours avant l'expiration. Vous recevrez automatiquement un email lorsque cela sera possible."
654
+ "Merge Descriptions","Combiner les descriptions"
655
+ "Merge short and normal descriptions as one content for ricardo product description. The short description will be the first part and the normal description will be the second part of the ricardo article description.","Combiner la description courte et normale en tant qu'un seul contenu pour les descriptions de produits sur ricardo.ch. La description courte sera dans la première partie de la descripton, ensuite la description normale du produit sera placé à la suite. dans la description du produit sur ricardo.ch"
656
+ "Only 10 pictures maximum allowed.","Seulement 10 images maximum sont autorisées."
657
+ "The starting date must start one hour in future. It will be automatically updated to list on ricardo.","La date de début doit démarrer dans une heure dans le futur. Il sera mis à jour automatiquement lorsqu'il sera listé sur ricardo.ch"
658
+ "Enter product name: e.g. iphone","Entrer un nom de produit: exple: iphone"
659
+ "Sorry, no product found for fees calculation.","Désolé aucun produit trouvé pour effectuer le calcul des frais"
660
+ "Please, close this popup window and fix the errors before to be allowed to list your products on ricardo.ch.","Veuillez fermer cette fenêtre et corriger les erreurs avant de pouvoir lister les produits sur ricardo.ch"
661
+ "Product Listing Configuration","Configuration de la liste de produits"
662
+ "Currency Conversion","Conversion de la monnaie"
663
+ "The store's base currency is %2$s. Only %1$s is allowed as currency on ricardo.ch. Be aware that your product will be converted into %1$s. Check the documentation for more explanation.","La monnaie de base de la boutique est %2$s. Seul la monnaie %1$s est autorisée sur ricardo.ch. Sachez que les prix de vos produits seront convertis %1$s. Vérifier la documentation pour plus d'explication."
664
+ "Currency Rate not configured","Le cours des devises n'est pas configuré"
665
+ "Currency Rate not defined for CHF currency. Please configure your currency rate before to proceed.","Le cours n'est pas défini pour la monnaie CHF. Veuillez vérifier le cours de vos devises avant de continuer."
666
+ "Replace Carriage Return with br HTML Tag","Remplacer les retours charriots par le tag HTML <br>"
667
+ "Do you want to replace into the description the carriage return with <br> HTML Tag?","Voulez-vous remplacer dans la description des produits, les retours charriots par le tag HTML <br> ?"
668
+ "Product listing & promotion","Liste de produits & Promotions"
669
+ "Total price","Coût total"
670
+ "Important","Important"
671
+ "Listing Fees","Frais de listing"
672
+ "ricardo.ch does invoices in %s","ricardo.ch facture en %s"
673
+ "Sales Fee (following the <a href=""%s"" target=""_blank"">fees rules from 01.07.2014</a>)","Frais de vente (correspondant aux <a href=""%s"" target=""_blank"">conditions de frais du 01.07.2014</a>)"
674
+ "With the confirmation of the publication, you accept the <a href=""%s"" target=""_blank"">terms and conditions</a> and <a href=""%s"" target=""_blank"">privacy policy</a>","En confirmant la publication, vous acceptez les <a href=""%s"" target=""_blank"">termes et conditions</a> et <a href=""%s"" target=""_blank"">la politique de confidentialité</a>"
675
+ "Confirm, check and List","Confirmer, vérifier et lister"
676
+ "Send us your configuration","Envoyez nous votre configuration"
677
+ "Export your configuration","Exporter votre configuration"
678
+ "Receive email notification in case of error? Email are sent to the main shop contact and are related to API errors, Token expiration, etc...","Voulez-vous recevoir un email de notification en cas d'erreur? Les emails sont envoyés au contact principal de la boutique en cas d'erreur avec l'API ou que le token expire, etc..."
js/ricento/adminhtml.js CHANGED
@@ -182,6 +182,37 @@ Ricento.progressPopup = function(url) {
182
  }
183
  });
184
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  Ricento.closePopup = function() {
186
  Windows.close('ricento_popup');
187
  };
@@ -294,7 +325,6 @@ Ricento.salesOptionsForm.prototype = {
294
  Countable.live($(this.htmlIdPrefix + 'product_warranty_description_fr'), function (counter){
295
  $(self.htmlIdPrefix + 'product_warranty_description_fr_result__all').update(counter.characters);
296
  });
297
-
298
  },
299
  toggleRequired : function(field, required, label) {
300
  field = $(field);
@@ -363,15 +393,18 @@ Ricento.salesOptionsForm.prototype = {
363
  warrantyDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'product_warranty_description_' + this.langs[i] + ']')[0];
364
 
365
  required = (field.value == '0') ? 1 : 0;
366
- currentLang = $('product_listing_publish_languages').value;
367
 
368
- switch (currentLang) {
369
- case 'de':
370
- case 'fr':
371
- if (this.langs[i] != currentLang) {
372
- required = false;
373
- }
374
- break;
 
 
 
 
375
  }
376
 
377
  warrantyDescription.disabled = !required;
@@ -429,15 +462,18 @@ Ricento.RulesForm = Class.create (Ricento.salesOptionsForm, {
429
  paymentDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'payment_description_' + this.langs[i] + ']')[0];
430
 
431
  required = field.checked;
432
- currentLang = $('product_listing_publish_languages').value;
433
 
434
- switch (currentLang) {
435
- case 'de':
436
- case 'fr':
437
- if (this.langs[i] != currentLang) {
438
- required = false;
439
- }
440
- break;
 
 
 
 
441
  }
442
 
443
  paymentDescription.disabled = !required;
@@ -450,17 +486,20 @@ Ricento.RulesForm = Class.create (Ricento.salesOptionsForm, {
450
  shippingDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'shipping_description_' + this.langs[i] + ']')[0];
451
 
452
  required = (field.value == '0') ? 1 : 0;
453
- currentLang = $('product_listing_publish_languages').value;
454
-
455
- switch (currentLang) {
456
- case 'de':
457
- case 'fr':
458
- if (this.langs[i] != currentLang) {
459
- required = false;
460
- }
461
- break;
 
 
462
  }
463
 
 
464
  shippingDescription.disabled = !required;
465
  this.toggleRequired(shippingDescription, required, shippingDescriptionLabel);
466
  }
@@ -497,7 +536,7 @@ Ricento.RulesForm = Class.create (Ricento.salesOptionsForm, {
497
  this._changePrice(packageShipping);
498
  select.addClassName('hidden');
499
  } else {
500
- this._changePrice(0);
501
  select.addClassName('hidden');
502
  }
503
  },
@@ -608,6 +647,71 @@ Ricento.CategoryMappper.prototype = {
608
  Ricento.categoryMappingTargetInput.value = formSerialized['ricardo_category_id'];
609
  Ricento.categoryMappingTargetTitle.innerHTML = formSerialized['ricardo_category_selected_title'];
610
  Ricento.closePopup();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
611
  }
612
  };
613
  Ricento.GeneralForm = Class.create();
182
  }
183
  });
184
  };
185
+
186
+ Ricento.confirmationPopup = function(url) {
187
+ if ($('ricento_popup') && typeof(Windows) != 'undefined') {
188
+ Windows.focus('ricento_popup');
189
+ return;
190
+ }
191
+
192
+ var parameters = $('edit_form').serialize(true);
193
+ Dialog.info({url:url, options: {parameters: parameters}}, {
194
+ closable:true,
195
+ resizable:true,
196
+ maximizable:true,
197
+ draggable:true,
198
+ className:'magento',
199
+ windowClassName:'confirmation-popup-window',
200
+ title: Translator.translate('List the products on ricardo.ch'),
201
+ top:50,
202
+ width:640,
203
+ height:480,
204
+ zIndex:1000,
205
+ recenterAuto:false,
206
+ hideEffect:Element.hide,
207
+ showEffect:Element.show,
208
+ id:'ricento_popup_confirmation',
209
+ showProgress:true,
210
+ onShow:function(dialog) {
211
+ dialog.element.innerHTML.evalScripts();
212
+ }
213
+ });
214
+ };
215
+
216
  Ricento.closePopup = function() {
217
  Windows.close('ricento_popup');
218
  };
325
  Countable.live($(this.htmlIdPrefix + 'product_warranty_description_fr'), function (counter){
326
  $(self.htmlIdPrefix + 'product_warranty_description_fr_result__all').update(counter.characters);
327
  });
 
328
  },
329
  toggleRequired : function(field, required, label) {
330
  field = $(field);
393
  warrantyDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'product_warranty_description_' + this.langs[i] + ']')[0];
394
 
395
  required = (field.value == '0') ? 1 : 0;
 
396
 
397
+ if ($('product_listing_publish_languages')) {
398
+ currentLang = $('product_listing_publish_languages').value;
399
+
400
+ switch (currentLang) {
401
+ case 'de':
402
+ case 'fr':
403
+ if (this.langs[i] != currentLang) {
404
+ required = false;
405
+ }
406
+ break;
407
+ }
408
  }
409
 
410
  warrantyDescription.disabled = !required;
462
  paymentDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'payment_description_' + this.langs[i] + ']')[0];
463
 
464
  required = field.checked;
 
465
 
466
+ if ($('product_listing_publish_languages')) {
467
+ currentLang = $('product_listing_publish_languages').value;
468
+
469
+ switch (currentLang) {
470
+ case 'de':
471
+ case 'fr':
472
+ if (this.langs[i] != currentLang) {
473
+ required = false;
474
+ }
475
+ break;
476
+ }
477
  }
478
 
479
  paymentDescription.disabled = !required;
486
  shippingDescriptionLabel = $$('label[for='+ this.htmlIdPrefix + 'shipping_description_' + this.langs[i] + ']')[0];
487
 
488
  required = (field.value == '0') ? 1 : 0;
489
+ if ($('product_listing_publish_languages')) {
490
+ currentLang = $('product_listing_publish_languages').value;
491
+
492
+ switch (currentLang) {
493
+ case 'de':
494
+ case 'fr':
495
+ if (this.langs[i] != currentLang) {
496
+ required = false;
497
+ }
498
+ break;
499
+ }
500
  }
501
 
502
+
503
  shippingDescription.disabled = !required;
504
  this.toggleRequired(shippingDescription, required, shippingDescriptionLabel);
505
  }
536
  this._changePrice(packageShipping);
537
  select.addClassName('hidden');
538
  } else {
539
+ this._changePrice($(this.htmlIdPrefix + 'shipping_price').value);
540
  select.addClassName('hidden');
541
  }
542
  },
647
  Ricento.categoryMappingTargetInput.value = formSerialized['ricardo_category_id'];
648
  Ricento.categoryMappingTargetTitle.innerHTML = formSerialized['ricardo_category_selected_title'];
649
  Ricento.closePopup();
650
+ },
651
+ initAutocomplete : function(url, destinationElement, defaultText){
652
+
653
+ var suggest = $('ricardo_categories_suggest');
654
+ var clearTimeout = 0;
655
+ var delay = 1000;
656
+
657
+ Event.observe(suggest, 'click', function () {
658
+ if (defaultText == suggest.value) {
659
+ suggest.value = '';
660
+ }
661
+ });
662
+
663
+ Event.observe(suggest, 'keydown', function () {
664
+ if (suggest.value.length >= 2 && !clearTimeout) {
665
+ clearTimeout = setTimeout(function(){
666
+ new Ajax.Request(
667
+ url,
668
+ {
669
+ method: 'get',
670
+ parameters: {sentence: $F('ricardo_categories_suggest')},
671
+ onComplete: function (transport) {
672
+ if (!transport.responseText.isJSON()) {
673
+ return;
674
+ }
675
+
676
+ var json = transport.responseText.evalJSON();
677
+ //var suggestions = '';
678
+
679
+ Element.hide('loading-mask');
680
+ clearTimeout = 0;
681
+
682
+ if (json.levels >= 5) {
683
+ $('ricardo_categories').addClassName('ricardo_categories_resized');
684
+ }
685
+
686
+ if (!json.error) {
687
+ $('messages').innerHTML = '';
688
+ $('category-tree').innerHTML = json.content;
689
+ $('ricardo_category_selected_title').value = json.category_id;
690
+
691
+ // To trigger event and reload some behavior after
692
+ categoryMapper = new Ricento.CategoryMappper({
693
+ wrapperElement : 'ricardo_categories',
694
+ loadChildrenUrl : json.children_url
695
+ });
696
+
697
+ //if (json.other_suggestions.length > 0) {
698
+ // json.other_suggestions.each(function(suggestion){
699
+ // suggestions += '<button type="button" class="button suggestion" onclick="alert(\''+ suggestion['CategoryId'] +'\')"><span><span>'+ suggestion['CategoryName'] +'</span></span></button>';
700
+ // });
701
+ //}
702
+ } else {
703
+ $('messages').innerHTML = json.error;
704
+ $('ricardo_categories').select('li').each(function(item) {
705
+ item.removeClassName('suggested');
706
+ });
707
+ }
708
+ //$('other-suggestions').innerHTML = suggestions;
709
+ }
710
+ }
711
+ )
712
+ }, delay);
713
+ }
714
+ });
715
  }
716
  };
717
  Ricento.GeneralForm = Class.create();
lib/Diglin/Ricardo/.DS_Store CHANGED
Binary file
lib/Diglin/Ricardo/Api.php CHANGED
@@ -95,8 +95,7 @@ class Api implements ApiInterface
95
  CURLOPT_POSTFIELDS => $this->jsonEncode($params),
96
  CURLOPT_HTTPHEADER => $this->_addHeaders(),
97
  CURLOPT_RETURNTRANSFER => true,
98
- CURLOPT_SSLVERSION => 0,
99
- CURLOPT_SSL_CIPHER_LIST => 'TLSv1'
100
  );
101
 
102
  $ch = curl_init();
@@ -130,7 +129,7 @@ class Api implements ApiInterface
130
  $dir = dirname($this->getConfig()->getLogFilePath());
131
  @mkdir($dir, 0775);
132
  if (is_writable($dir . DIRECTORY_SEPARATOR)) {
133
- file_put_contents($this->getConfig()->getLogFilePath(), print_r($this->_lastDebug, true), FILE_APPEND);
134
  }
135
  }
136
  }
95
  CURLOPT_POSTFIELDS => $this->jsonEncode($params),
96
  CURLOPT_HTTPHEADER => $this->_addHeaders(),
97
  CURLOPT_RETURNTRANSFER => true,
98
+ CURLOPT_SSLVERSION => 0
 
99
  );
100
 
101
  $ch = curl_init();
129
  $dir = dirname($this->getConfig()->getLogFilePath());
130
  @mkdir($dir, 0775);
131
  if (is_writable($dir . DIRECTORY_SEPARATOR)) {
132
+ file_put_contents($this->getConfig()->getLogFilePath(), print_r($this->_lastDebug, true) . "\n", FILE_APPEND);
133
  }
134
  }
135
  }
lib/Diglin/Ricardo/Core/Helper.php CHANGED
@@ -93,4 +93,16 @@ class Helper
93
 
94
  return $return;
95
  }
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
93
 
94
  return $return;
95
  }
96
+
97
+ /**
98
+ * @return string
99
+ */
100
+ public static function guid()
101
+ {
102
+ if (function_exists('com_create_guid') === true) {
103
+ return strtolower(trim(com_create_guid(), '{}'));
104
+ }
105
+
106
+ return strtolower(sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)));
107
+ }
108
  }
lib/Diglin/Ricardo/Enums/.DS_Store ADDED
Binary file
lib/Diglin/Ricardo/Enums/SearchErrors.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+
22
+ namespace Diglin\Ricardo\Enums;
23
+
24
+ class SearchErrors extends AbstractEnums
25
+ {
26
+
27
+ const EMPTYSENTENCE = 1; // The search text is empty
28
+ const NOCATEGORYFOUND = 2; // The no category found
29
+ const BASESEARCHPARAMETERSEMPTY = 3; // The Base Search Parameters Empty
30
+ const PAGENUMBERTOOSMALL = 4; // The page number is too small need start from 1
31
+ const PAGESIZETOOSMALL = 5; // The Page Size is too small need start from 1
32
+ const NORESULTFOUND = 6; // No result found
33
+ const SITENUMBERISNOTSET = 7; // The site number is not selected default = 1
34
+ const UNIVERSEMISS = 8; // The universe id is not selected
35
+ const NUMBEROFARTICLESINCORECT = 9; // The Number Of Articles incorrect
36
+ const NOTACCESSORYCATEGORY = 10; // Not accessory category
37
+ const INCORRECTSELLERID = 11; // The incorrect seller identifier
38
+
39
+ /**
40
+ * @return array
41
+ */
42
+ public static function getEnums()
43
+ {
44
+ return array(
45
+ array('label' => 'The search text is empty', 'value' => self::EMPTYSENTENCE),
46
+ array('label' => 'No category found', 'value' => self::NOCATEGORYFOUND),
47
+ array('label' => 'The Base Search Parameters Empty', 'value' => self::BASESEARCHPARAMETERSEMPTY),
48
+ array('label' => 'The page number is too small need start from 1', 'value' => self::PAGENUMBERTOOSMALL),
49
+ array('label' => 'The Page Size is too small need start from 1', 'value' => self::PAGESIZETOOSMALL),
50
+ array('label' => 'No result found', 'value' => self::NORESULTFOUND),
51
+ array('label' => 'The site number is not selected default = 1', 'value' => self::SITENUMBERISNOTSET),
52
+ array('label' => 'The universe id is not selected', 'value' => self::UNIVERSEMISS),
53
+ array('label' => 'The Number Of Articles incorrect', 'value' => self::NUMBEROFARTICLESINCORECT),
54
+ array('label' => 'Not accessory category', 'value' => self::NOTACCESSORYCATEGORY),
55
+ array('label' => 'The incorrect seller identifier', 'value' => self::INCORRECTSELLERID),
56
+ );
57
+ }
58
+ }
lib/Diglin/Ricardo/Exceptions/SearchException.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Exceptions;
22
+
23
+ /**
24
+ * Class SearchException
25
+ * @package Diglin\Ricardo\Exceptions
26
+ */
27
+ class SearchException extends ExceptionAbstract
28
+ {
29
+
30
+ }
lib/Diglin/Ricardo/Managers/.DS_Store ADDED
Binary file
lib/Diglin/Ricardo/Managers/Search.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+
22
+ namespace Diglin\Ricardo\Managers;
23
+
24
+ use Diglin\Ricardo\Managers\Search\Parameter\GetCategoryBestMatchParameter;
25
+
26
+ class Search extends ManagerAbstract
27
+ {
28
+ /**
29
+ * @var string
30
+ */
31
+ protected $_serviceName = 'search';
32
+
33
+ /**
34
+ * @param GetCategoryBestMatchParameter $parameter
35
+ * @return array
36
+ */
37
+ public function getCategoryBestMatch(GetCategoryBestMatchParameter $parameter)
38
+ {
39
+ return $this->_proceed('CategoryBestMatch', $parameter);
40
+ }
41
+ }
lib/Diglin/Ricardo/Managers/Search/Parameter/GetCategoryBestMatchParameter.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Managers\Search\Parameter;
22
+
23
+ use Diglin\Ricardo\Enums\System\LanguageId;
24
+ use Diglin\Ricardo\Managers\ParameterAbstract;
25
+
26
+ /**
27
+ * Class GetCategoryBestMatchParameter
28
+ * @package Diglin\Ricardo\Managers\Search\Parameter
29
+ */
30
+ class GetCategoryBestMatchParameter extends ParameterAbstract
31
+ {
32
+ /**
33
+ * @var int
34
+ */
35
+ protected $_languageId = LanguageId::GERMAN;
36
+
37
+ /**
38
+ * @var int
39
+ */
40
+ protected $_numberMaxOfResult = 1;
41
+
42
+ /**
43
+ * @var bool
44
+ */
45
+ protected $_onlyAllowToSell = true;
46
+
47
+ /**
48
+ * @var string
49
+ */
50
+ protected $_sentence = '';
51
+
52
+ /**
53
+ * @var array
54
+ */
55
+ protected $_requiredProperties = array(
56
+ 'languageId',
57
+ 'numberMaxOfResult',
58
+ 'onlyAllowToSell',
59
+ 'sentence'
60
+ );
61
+
62
+ /**
63
+ * @return int
64
+ */
65
+ public function getLanguageId()
66
+ {
67
+ return (int) $this->_languageId;
68
+ }
69
+
70
+ /**
71
+ * @param int $languageId
72
+ * @return $this
73
+ */
74
+ public function setLanguageId($languageId)
75
+ {
76
+ $this->_languageId = $languageId;
77
+ return $this;
78
+ }
79
+
80
+ /**
81
+ * @return int
82
+ */
83
+ public function getNumberMaxOfResult()
84
+ {
85
+ return (int) $this->_numberMaxOfResult;
86
+ }
87
+
88
+ /**
89
+ * @param int $numberMaxOfResult
90
+ * @return $this
91
+ */
92
+ public function setNumberMaxOfResult($numberMaxOfResult)
93
+ {
94
+ $this->_numberMaxOfResult = $numberMaxOfResult;
95
+ return $this;
96
+ }
97
+
98
+ /**
99
+ * @return boolean
100
+ */
101
+ public function getOnlyAllowToSell()
102
+ {
103
+ return (bool) $this->_onlyAllowToSell;
104
+ }
105
+
106
+ /**
107
+ * @param boolean $onlyAllowToSell
108
+ * @return $this
109
+ */
110
+ public function setOnlyAllowToSell($onlyAllowToSell)
111
+ {
112
+ $this->_onlyAllowToSell = $onlyAllowToSell;
113
+ return $this;
114
+ }
115
+
116
+ /**
117
+ * @return string
118
+ */
119
+ public function getSentence()
120
+ {
121
+ return (string) $this->_sentence;
122
+ }
123
+
124
+ /**
125
+ * @param string $sentence
126
+ * @return $this
127
+ */
128
+ public function setSentence($sentence)
129
+ {
130
+ $this->_sentence = $sentence;
131
+ return $this;
132
+ }
133
+ }
lib/Diglin/Ricardo/Managers/Sell.php CHANGED
@@ -27,6 +27,7 @@ use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticleParameter;
27
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticlesParameter;
28
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
29
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticlesParameter;
 
30
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
31
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
32
  use Diglin\Ricardo\Managers\Sell\Parameter\UpdateArticleParameter;
@@ -148,13 +149,30 @@ class Sell extends ManagerAbstract
148
  return $result['ArticleFee'];
149
  }
150
 
 
151
  /**
152
  * @param UpdateArticlePicturesParameter $parameter
153
  * @return $this
 
 
 
154
  */
155
  public function updateArticlePictures(UpdateArticlePicturesParameter $parameter)
156
  {
157
  $this->_proceed('UpdateArticlePictures', $parameter); // no value returned
158
  return $this;
159
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  }
27
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticlesParameter;
28
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
29
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticlesParameter;
30
+ use Diglin\Ricardo\Managers\Sell\Parameter\GetArticlesFeeParameter;
31
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
32
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
33
  use Diglin\Ricardo\Managers\Sell\Parameter\UpdateArticleParameter;
149
  return $result['ArticleFee'];
150
  }
151
 
152
+
153
  /**
154
  * @param UpdateArticlePicturesParameter $parameter
155
  * @return $this
156
+ * @throws \Diglin\Ricardo\Exceptions\ExceptionAbstract
157
+ * @throws \Diglin\Ricardo\Exceptions\SecurityException
158
+ * @throws \Exception
159
  */
160
  public function updateArticlePictures(UpdateArticlePicturesParameter $parameter)
161
  {
162
  $this->_proceed('UpdateArticlePictures', $parameter); // no value returned
163
  return $this;
164
  }
165
+
166
+ /**
167
+ * @param GetArticlesFeeParameter $parameter
168
+ * @return $this
169
+ * @throws \Diglin\Ricardo\Exceptions\ExceptionAbstract
170
+ * @throws \Diglin\Ricardo\Exceptions\SecurityException
171
+ * @throws \Exception
172
+ * @return array
173
+ */
174
+ public function getArticlesFee(GetArticlesFeeParameter $parameter)
175
+ {
176
+ return $this->_proceed('ArticlesFee', $parameter);
177
+ }
178
  }
lib/Diglin/Ricardo/Managers/Sell/Parameter/BaseInsertArticleWithTrackingParameter.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Managers\Sell\Parameter;
22
+
23
+ use Diglin\Ricardo\Managers\ParameterAbstract;
24
+
25
+ /**
26
+ * Class BaseInsertArticleWithTrackingParameter
27
+ * @package Diglin\Ricardo\Managers\Sell\Parameter
28
+ */
29
+ class BaseInsertArticleWithTrackingParameter extends InsertArticleParameter
30
+ {
31
+ /**
32
+ * @var string
33
+ */
34
+ protected $_correlationKey = '';
35
+
36
+ /**
37
+ * @var array
38
+ */
39
+ protected $_requiredProperties = array(
40
+ 'articleInformation',
41
+ 'descriptions',
42
+ 'pictures',
43
+ );
44
+
45
+ /**
46
+ * @var array
47
+ */
48
+ protected $_optionalProperties = array(
49
+ 'brandingArticleDetails',
50
+ 'isUpdateArticle',
51
+ 'carDealerArticleId',
52
+ 'correlationKey'
53
+ );
54
+
55
+ /**
56
+ * @return string
57
+ */
58
+ public function getCorrelationKey()
59
+ {
60
+ return $this->_correlationKey;
61
+ }
62
+
63
+ /**
64
+ * @param string $correlationKey
65
+ * @return $this
66
+ */
67
+ public function setCorrelationKey($correlationKey)
68
+ {
69
+ $this->_correlationKey = $correlationKey;
70
+ return $this;
71
+ }
72
+ }
lib/Diglin/Ricardo/Managers/Sell/Parameter/CloseArticlesParameter.php CHANGED
@@ -65,11 +65,11 @@ class CloseArticlesParameter extends ParameterAbstract
65
  }
66
 
67
  /**
68
- * @param CloseArticleParameter $articleIds
69
  * @param bool $clear
70
  * @return $this
71
  */
72
- public function setArticleIds(CloseArticleParameter $articleIds = null, $clear = false)
73
  {
74
  if ($clear) {
75
  $this->_articleIds = array();
@@ -79,7 +79,12 @@ class CloseArticlesParameter extends ParameterAbstract
79
  return $this;
80
  }
81
 
82
- $this->_articleIds[] = $articleIds;
 
 
 
 
 
83
  return $this;
84
  }
85
 
65
  }
66
 
67
  /**
68
+ * @param int|array $articleIds
69
  * @param bool $clear
70
  * @return $this
71
  */
72
+ public function setArticleIds($articleIds = null, $clear = false)
73
  {
74
  if ($clear) {
75
  $this->_articleIds = array();
79
  return $this;
80
  }
81
 
82
+ if (is_numeric($articleIds)) {
83
+ $this->_articleIds[] = $articleIds;
84
+ } else if (is_array($articleIds)) {
85
+ $this->_articleIds += $articleIds;
86
+ }
87
+
88
  return $this;
89
  }
90
 
lib/Diglin/Ricardo/Managers/Sell/Parameter/ClosePlannedArticleParameter.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Managers\Sell\Parameter;
22
+
23
+ use \Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
24
+
25
+ /**
26
+ * Class ClosePlannedArticleParameter
27
+ * @package Diglin\Ricardo\Managers\Sell\Parameter
28
+ */
29
+ class ClosePlannedArticleParameter extends DeletePlannedArticleParameter
30
+ {
31
+ /**
32
+ * @var array
33
+ */
34
+ protected $_requiredProperties = array(
35
+ 'plannedArticleId',
36
+ );
37
+ }
lib/Diglin/Ricardo/Managers/Sell/Parameter/DeletePlannedArticleParameter.php CHANGED
@@ -51,6 +51,13 @@ class DeletePlannedArticleParameter extends ParameterAbstract
51
  'plannedArticleId',
52
  );
53
 
 
 
 
 
 
 
 
54
  /**
55
  * @param string $antiforgeryToken
56
  * @return $this
51
  'plannedArticleId',
52
  );
53
 
54
+ /**
55
+ * @var array
56
+ */
57
+ protected $_optionalProperties = array(
58
+ 'plannedIndex'
59
+ );
60
+
61
  /**
62
  * @param string $antiforgeryToken
63
  * @return $this
lib/Diglin/Ricardo/Managers/Sell/Parameter/DeletePlannedArticlesParameter.php CHANGED
@@ -65,11 +65,11 @@ class DeletePlannedArticlesParameter extends ParameterAbstract
65
  }
66
 
67
  /**
68
- * @param DeletePlannedArticleParameter $plannedArticle
69
  * @param bool $clear
70
  * @return $this
71
  */
72
- public function setArticles(DeletePlannedArticleParameter $plannedArticle = null, $clear = false)
73
  {
74
  if ($clear) {
75
  $this->_articles = array();
65
  }
66
 
67
  /**
68
+ * @param ClosePlannedArticleParameter $plannedArticle
69
  * @param bool $clear
70
  * @return $this
71
  */
72
+ public function setArticles(ClosePlannedArticleParameter $plannedArticle = null, $clear = false)
73
  {
74
  if ($clear) {
75
  $this->_articles = array();
lib/Diglin/Ricardo/Managers/Sell/Parameter/GetArticleFeeParameter.php ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Managers\Sell\Parameter;
22
+
23
+ use Diglin\Ricardo\Managers\ParameterAbstract;
24
+ use Diglin\Ricardo\Enums\Article\PromotionCode;
25
+
26
+ /**
27
+ * Class GetArticleFeeParameter
28
+ * @package Diglin\Ricardo\Managers\Sell\Parameter
29
+ */
30
+ class GetArticleFeeParameter extends ParameterAbstract
31
+ {
32
+ /**
33
+ * @var string
34
+ */
35
+ protected $_articleCondition; // required
36
+
37
+ /**
38
+ * @var float
39
+ */
40
+ protected $_buyNowPrice; // optional
41
+
42
+ /**
43
+ * @var int
44
+ */
45
+ protected $_categoryId; // required
46
+
47
+ /**
48
+ * @var bool
49
+ */
50
+ protected $_excludeListingFees; // required
51
+
52
+ /**
53
+ * @var int
54
+ */
55
+ protected $_initialQuantity; // required
56
+
57
+ /**
58
+ * @var int
59
+ */
60
+ protected $_pictureCount; // required
61
+
62
+ /**
63
+ * @var array PromotionCode
64
+ */
65
+ protected $_promotionIds; // required
66
+
67
+ /**
68
+ * @var string
69
+ */
70
+ protected $_startDate; // required
71
+
72
+ /**
73
+ * @var float
74
+ */
75
+ protected $_startPrice; // optional
76
+
77
+ protected $_requiredProperties = array(
78
+ 'articleCondition',
79
+ 'categoryId',
80
+ 'excludeListingFees',
81
+ 'initialQuantity',
82
+ 'pictureCount',
83
+ 'promotionIds',
84
+ 'startDate',
85
+ );
86
+
87
+ protected $_optionalProperties = array(
88
+ 'buyNowPrice',
89
+ 'startPrice'
90
+ );
91
+
92
+ /**
93
+ * @return string
94
+ */
95
+ public function getArticleCondition()
96
+ {
97
+ return $this->_articleCondition;
98
+ }
99
+
100
+ /**
101
+ * @param string $articleCondition
102
+ * @return $this
103
+ */
104
+ public function setArticleCondition($articleCondition)
105
+ {
106
+ $this->_articleCondition = $articleCondition;
107
+ return $this;
108
+ }
109
+
110
+ /**
111
+ * @return float
112
+ */
113
+ public function getBuyNowPrice()
114
+ {
115
+ return $this->_buyNowPrice;
116
+ }
117
+
118
+ /**
119
+ * @param float $buyNowPrice
120
+ * @return $this
121
+ */
122
+ public function setBuyNowPrice($buyNowPrice)
123
+ {
124
+ $this->_buyNowPrice = (float) $buyNowPrice;
125
+ return $this;
126
+ }
127
+
128
+ /**
129
+ * @return int
130
+ */
131
+ public function getCategoryId()
132
+ {
133
+ return $this->_categoryId;
134
+ }
135
+
136
+ /**
137
+ * @param int $categoryId
138
+ * @return $this
139
+ */
140
+ public function setCategoryId($categoryId)
141
+ {
142
+ $this->_categoryId = (int) $categoryId;
143
+ return $this;
144
+ }
145
+
146
+ /**
147
+ * @return boolean
148
+ */
149
+ public function getExcludeListingFees()
150
+ {
151
+ return ($this->_excludeListingFees) ? 1 : 0;
152
+ }
153
+
154
+ /**
155
+ * @param boolean $excludeListingFees
156
+ * @return $this
157
+ */
158
+ public function setExcludeListingFees($excludeListingFees)
159
+ {
160
+ $this->_excludeListingFees = (bool) $excludeListingFees;
161
+ return $this;
162
+ }
163
+
164
+ /**
165
+ * @return int
166
+ */
167
+ public function getInitialQuantity()
168
+ {
169
+ return $this->_initialQuantity;
170
+ }
171
+
172
+ /**
173
+ * @param int $initialQuantity
174
+ * @return $this
175
+ */
176
+ public function setInitialQuantity($initialQuantity)
177
+ {
178
+ $this->_initialQuantity = (int) $initialQuantity;
179
+ return $this;
180
+ }
181
+
182
+ /**
183
+ * @return int
184
+ */
185
+ public function getPictureCount()
186
+ {
187
+ return (int) $this->_pictureCount;
188
+ }
189
+
190
+ /**
191
+ * @param int $pictureCount
192
+ * @return $this
193
+ */
194
+ public function setPictureCount($pictureCount)
195
+ {
196
+ $this->_pictureCount = $pictureCount;
197
+ return $this;
198
+ }
199
+
200
+ /**
201
+ * @return array
202
+ */
203
+ public function getPromotionIds()
204
+ {
205
+ return $this->_promotionIds;
206
+ }
207
+
208
+ /**
209
+ * @param array $promotionIds
210
+ * @return $this
211
+ */
212
+ public function setPromotionIds($promotionIds)
213
+ {
214
+ $this->_promotionIds = (array) $promotionIds;
215
+ return $this;
216
+ }
217
+
218
+ /**
219
+ * @return string
220
+ */
221
+ public function getStartDate()
222
+ {
223
+ return $this->_startDate;
224
+ }
225
+
226
+ /**
227
+ * @param string $startDate
228
+ * @return $this
229
+ */
230
+ public function setStartDate($startDate)
231
+ {
232
+ $this->_startDate = $startDate;
233
+ return $this;
234
+ }
235
+
236
+ /**
237
+ * @return float
238
+ */
239
+ public function getStartPrice()
240
+ {
241
+ return $this->_startPrice;
242
+ }
243
+
244
+ /**
245
+ * @param float $startPrice
246
+ * @return $this
247
+ */
248
+ public function setStartPrice($startPrice)
249
+ {
250
+ $this->_startPrice = (float) $startPrice;
251
+ return $this;
252
+ }
253
+ }
lib/Diglin/Ricardo/Managers/Sell/Parameter/GetArticlesFeeParameter.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+ namespace Diglin\Ricardo\Managers\Sell\Parameter;
22
+
23
+ use Diglin\Ricardo\Managers\ParameterAbstract;
24
+
25
+ /**
26
+ * Class ArticlesDetails
27
+ * @package Diglin\Ricardo\Managers\Sell\Parameter
28
+ */
29
+ class GetArticlesFeeParameter extends ParameterAbstract
30
+ {
31
+ /**
32
+ * @var string
33
+ */
34
+ protected $_articlesDetails; // required
35
+
36
+ /**
37
+ * @var array
38
+ */
39
+ protected $_requiredProperties = array(
40
+ 'articlesDetails'
41
+ );
42
+
43
+ /**
44
+ * @param GetArticleFeeParameter $articleDetail
45
+ * @param bool $clear
46
+ * @return $this
47
+ */
48
+ public function setArticlesDetails(GetArticleFeeParameter $articleDetail = null, $clear = false)
49
+ {
50
+ if ($clear) {
51
+ $this->_articlesDetails = array();
52
+ }
53
+
54
+ if (is_null($articleDetail)) {
55
+ return $this;
56
+ }
57
+
58
+ $this->_articlesDetails [] = $articleDetail;
59
+ return $this;
60
+ }
61
+
62
+ /**
63
+ * @return array
64
+ */
65
+ public function getArticlesDetails()
66
+ {
67
+ return $this->_articlesDetails ;
68
+ }
69
+ }
lib/Diglin/Ricardo/Managers/Sell/Parameter/InsertArticlesParameter.php CHANGED
@@ -36,13 +36,14 @@ class InsertArticlesParameter extends ParameterAbstract
36
  /**
37
  * @var array
38
  */
39
- protected $_articles = array(); // required
40
 
41
  /**
42
  * @var array
43
  */
44
  protected $_requiredProperties = array(
45
- 'articles',
 
46
  );
47
 
48
  /**
@@ -64,24 +65,47 @@ class InsertArticlesParameter extends ParameterAbstract
64
  }
65
 
66
  /**
 
 
67
  * @param InsertArticleParameter $articles
68
  * @param bool $clear
69
  * @return $this
70
  */
71
  public function setArticles(InsertArticleParameter $articles, $clear = false)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  {
73
  if ($clear) {
74
- $this->_articles = array();
75
  }
76
- $this->_articles[] = $articles;
77
  return $this;
78
  }
79
 
80
  /**
81
  * @return array
82
  */
83
- public function getArticles()
84
  {
85
- return $this->_articles;
86
  }
87
  }
36
  /**
37
  * @var array
38
  */
39
+ protected $_articlesToInsert = array(); // required
40
 
41
  /**
42
  * @var array
43
  */
44
  protected $_requiredProperties = array(
45
+ 'antiforgeryToken',
46
+ 'articlesToInsert'
47
  );
48
 
49
  /**
65
  }
66
 
67
  /**
68
+ * @deprecated
69
+ *
70
  * @param InsertArticleParameter $articles
71
  * @param bool $clear
72
  * @return $this
73
  */
74
  public function setArticles(InsertArticleParameter $articles, $clear = false)
75
+ {
76
+ $this->setArticlesToInsert($articles, $clear);
77
+ return $this;
78
+ }
79
+
80
+ /**
81
+ * @deprected
82
+ *
83
+ * @return array
84
+ */
85
+ public function getArticles()
86
+ {
87
+ return $this->getArticlesToInsert();
88
+ }
89
+
90
+ /**
91
+ * @param InsertArticleParameter $articles
92
+ * @param bool $clear
93
+ * @return $this
94
+ */
95
+ public function setArticlesToInsert(InsertArticleParameter $articles, $clear = false)
96
  {
97
  if ($clear) {
98
+ $this->_articlesToInsert = array();
99
  }
100
+ $this->_articlesToInsert[] = $articles;
101
  return $this;
102
  }
103
 
104
  /**
105
  * @return array
106
  */
107
+ public function getArticlesToInsert()
108
  {
109
+ return $this->_articlesToInsert;
110
  }
111
  }
lib/Diglin/Ricardo/Managers/SellerAccount/Parameter/SoldArticlesParameter.php CHANGED
@@ -147,6 +147,16 @@ class SoldArticlesParameter extends ParameterAbstract
147
  */
148
  protected $_shippedStatusFilter = ShippedStatusFilter::ANY;
149
 
 
 
 
 
 
 
 
 
 
 
150
  /**
151
  * @var array
152
  */
@@ -170,6 +180,8 @@ class SoldArticlesParameter extends ParameterAbstract
170
  'minimumEndDate',
171
  'paidStatusFilter',
172
  'shippedStatusFilter',
 
 
173
  );
174
 
175
  /**
@@ -473,4 +485,40 @@ class SoldArticlesParameter extends ParameterAbstract
473
  {
474
  return (int) $this->_shippedStatusFilter;
475
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
476
  }
147
  */
148
  protected $_shippedStatusFilter = ShippedStatusFilter::ANY;
149
 
150
+ /**
151
+ * @var array
152
+ */
153
+ protected $_excludedTransactionIdsFilter = array();
154
+
155
+ /**
156
+ * @var array
157
+ */
158
+ protected $_transactionIdsFilter = array();
159
+
160
  /**
161
  * @var array
162
  */
180
  'minimumEndDate',
181
  'paidStatusFilter',
182
  'shippedStatusFilter',
183
+ 'excludedTransactionIdsFilter',
184
+ 'transactionIdsFilter'
185
  );
186
 
187
  /**
485
  {
486
  return (int) $this->_shippedStatusFilter;
487
  }
488
+
489
+ /**
490
+ * @return array
491
+ */
492
+ public function getTransactionIdsFilter()
493
+ {
494
+ return $this->_transactionIdsFilter;
495
+ }
496
+
497
+ /**
498
+ * @param array $transactionIdsFilter
499
+ * @return $this
500
+ */
501
+ public function setTransactionIdsFilter($transactionIdsFilter)
502
+ {
503
+ $this->_transactionIdsFilter = $transactionIdsFilter;
504
+ return $this;
505
+ }
506
+
507
+ /**
508
+ * @return array
509
+ */
510
+ public function getExcludedTransactionIdsFilter()
511
+ {
512
+ return $this->_excludedTransactionIdsFilter;
513
+ }
514
+
515
+ /**
516
+ * @param array $excludedTransactionIdsFilter
517
+ * @return $this
518
+ */
519
+ public function setExcludedTransactionIdsFilter($excludedTransactionIdsFilter)
520
+ {
521
+ $this->_excludedTransactionIdsFilter = $excludedTransactionIdsFilter;
522
+ return $this;
523
+ }
524
  }
lib/Diglin/Ricardo/Services/Search.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Diglin GmbH - Switzerland
4
+ *
5
+ * This file is part of a Diglin GmbH module.
6
+ *
7
+ * This Diglin GmbH module is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU General Public License version 3 as
9
+ * published by the Free Software Foundation.
10
+ *
11
+ * This script is distributed in the hope that it will be useful, but WITHOUT
12
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
+ *
15
+ * @author Sylvain Rayé <support at diglin.com>
16
+ * @category Diglin
17
+ * @package Diglin_Ricardo
18
+ * @copyright Copyright (c) 2011-2015 Diglin (http://www.diglin.com)
19
+ * @license http://opensource.org/licenses/gpl-3.0 GNU General Public License, version 3 (GPLv3)
20
+ */
21
+
22
+ namespace Diglin\Ricardo\Services;
23
+
24
+ use Diglin\Ricardo\Managers\Search\Parameter\GetCategoryBestMatchParameter;
25
+
26
+ class Search extends ServiceAbstract
27
+ {
28
+ /**
29
+ * @var string
30
+ */
31
+ protected $_service = 'SearchService';
32
+
33
+ /**
34
+ * @var string
35
+ */
36
+ protected $_typeOfToken = self::TOKEN_TYPE_ANONYMOUS;
37
+
38
+ /**
39
+ * @param GetCategoryBestMatchParameter $getCategoryBestMatchParameter
40
+ * @return array
41
+ */
42
+ public function getCategoryBestMatch(GetCategoryBestMatchParameter $getCategoryBestMatchParameter)
43
+ {
44
+ // there is a typo error into the documentation for "getCategoryBestMatchParamter", keep it here too
45
+ return array(
46
+ 'method' => 'GetCategoryBestMatch',
47
+ 'params' => array('getCategoryBestMatchParamter' => $getCategoryBestMatchParameter->getDataProperties())
48
+ );
49
+ }
50
+
51
+ /**
52
+ * Get the best category result
53
+ *
54
+ * The Ricardo API returns:
55
+ * <pre>
56
+ * {
57
+ * "GetCategoryBestMatchResult": {
58
+ * "CategoriesBestMatch": [
59
+ * "CategoryId": "int",
60
+ * "CategoryName": "string",
61
+ * ],[],...
62
+ * }
63
+ * }
64
+ * </pre>
65
+ *
66
+ * @param array $data
67
+ * @return bool|array
68
+ */
69
+ public function getCategoryBestMatchResult($data)
70
+ {
71
+ if (isset($data['GetCategoryBestMatchResult']) && isset($data['GetCategoryBestMatchResult']['CategoriesBestMatch'])) {
72
+ return $data['GetCategoryBestMatchResult']['CategoriesBestMatch'];
73
+ }
74
+ return false;
75
+ }
76
+ }
lib/Diglin/Ricardo/Services/Sell.php CHANGED
@@ -26,6 +26,7 @@ use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticleParameter;
26
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticlesParameter;
27
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
28
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticlesParameter;
 
29
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
30
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
31
  use Diglin\Ricardo\Managers\Sell\Parameter\UpdateArticleParameter;
@@ -266,7 +267,6 @@ class Sell extends ServiceAbstract
266
  'method' => 'DeletePlannedArticles',
267
  'params' => array('deletePlannedArticlesParameter' => $deletePlannedArticleParameter->getDataProperties())
268
  );
269
-
270
  }
271
 
272
  /**
@@ -299,11 +299,64 @@ class Sell extends ServiceAbstract
299
  * Gets the article fee.
300
  *
301
  * @param $getArticleFeeParameter
 
302
  */
303
  public function getArticleFee($getArticleFeeParameter)
304
  {
305
  }
306
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  /**
308
  * Gets the update article fee.
309
  *
@@ -395,7 +448,9 @@ class Sell extends ServiceAbstract
395
  * "ArticleFee": "float"
396
  * "ArticleId": "int"
397
  * "CarDealerArticleId": "int"
 
398
  * "ErrorCodes": "int" ArticleErrors
 
399
  * "PlannedArticleId": "int"
400
  * }]
401
  * }
26
  use Diglin\Ricardo\Managers\Sell\Parameter\CloseArticlesParameter;
27
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticleParameter;
28
  use Diglin\Ricardo\Managers\Sell\Parameter\DeletePlannedArticlesParameter;
29
+ use Diglin\Ricardo\Managers\Sell\Parameter\GetArticlesFeeParameter;
30
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticleParameter;
31
  use Diglin\Ricardo\Managers\Sell\Parameter\InsertArticlesParameter;
32
  use Diglin\Ricardo\Managers\Sell\Parameter\UpdateArticleParameter;
267
  'method' => 'DeletePlannedArticles',
268
  'params' => array('deletePlannedArticlesParameter' => $deletePlannedArticleParameter->getDataProperties())
269
  );
 
270
  }
271
 
272
  /**
299
  * Gets the article fee.
300
  *
301
  * @param $getArticleFeeParameter
302
+ * @return array
303
  */
304
  public function getArticleFee($getArticleFeeParameter)
305
  {
306
  }
307
 
308
+ public function getArticleFeeResult($getArticleFeeParameter)
309
+ {
310
+ }
311
+
312
+ /**
313
+ * @param GetArticlesFeeParameter $getArticlesFeeParameter
314
+ * @return array
315
+ */
316
+ public function getArticlesFee(GetArticlesFeeParameter $getArticlesFeeParameter)
317
+ {
318
+ return array(
319
+ 'method' => 'GetArticlesFee',
320
+ 'params' => array('getArticlesFeeParameter' => $getArticlesFeeParameter->getDataProperties())
321
+ );
322
+ }
323
+
324
+ /**
325
+ * @param array $data
326
+ * @return bool
327
+ *
328
+ * [0] => Array
329
+ (
330
+ [CoveredByPLP] =>
331
+ [ListingFee] => 0
332
+ [PromotionFees] => Array
333
+ (
334
+ [0] => Array
335
+ (
336
+ [PromotionFee] => 0
337
+ [PromotionId] => 4194304
338
+ )
339
+
340
+ [1] => Array
341
+ (
342
+ [PromotionFee] => 0
343
+ [PromotionId] => 8388608
344
+ )
345
+ [...] => ...
346
+
347
+ )
348
+
349
+ [TotalFee] => 5
350
+ )
351
+ */
352
+ public function getArticlesFeeResult(array $data)
353
+ {
354
+ if (isset($data['GetArticlesFeeResult']) && isset($data['GetArticlesFeeResult']['ArticlesFee'])) {
355
+ return $data['GetArticlesFeeResult']['ArticlesFee'];
356
+ }
357
+ return false;
358
+ }
359
+
360
  /**
361
  * Gets the update article fee.
362
  *
448
  * "ArticleFee": "float"
449
  * "ArticleId": "int"
450
  * "CarDealerArticleId": "int"
451
+ * "CorrelationKey": "int"
452
  * "ErrorCodes": "int" ArticleErrors
453
+ * "ErrorCodesType": "int" @see https://ws.ricardo.ch/RicardoApi/documentation/html/T_Ricardo_Enums_Errors_ErrorList.htm
454
  * "PlannedArticleId": "int"
455
  * }]
456
  * }
lib/Diglin/Ricardo/Services/SellerAccount.php CHANGED
@@ -454,7 +454,7 @@ class SellerAccount extends ServiceAbstract
454
  public function getSoldArticlesResult(array $data)
455
  {
456
  if (isset($data['GetSoldArticlesResult']) && isset($data['GetSoldArticlesResult']['SoldArticles'])) {
457
- return $data['GetSoldArticlesResult']['SoldArticles'];
458
  }
459
  return array();
460
  }
454
  public function getSoldArticlesResult(array $data)
455
  {
456
  if (isset($data['GetSoldArticlesResult']) && isset($data['GetSoldArticlesResult']['SoldArticles'])) {
457
+ return $data['GetSoldArticlesResult'];
458
  }
459
  return array();
460
  }
package.xml CHANGED
@@ -1,9 +1,9 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>diglin_ricento</name>
4
- <version>1.0.18</version>
5
  <stability>stable</stability>
6
- <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Sell your products from Magento to ricardo.ch and sync your order back into your shop to treat them.</summary>
@@ -38,7 +38,34 @@
38
  &lt;p&gt;With around 700,000 current offers (auctions and fixed price), 2.5 million brand-name articles on &lt;a href="http://www.ricardoshops"&gt;ricardoshops&lt;/a&gt;.ch, around 100,000 vehicles plus 35,000 parts and accessories on &lt;a href="http://www.autoricardo.ch"&gt;autoricardo.ch&lt;/a&gt; and over 2.3 million members, ricardo.ch is the largest online marketplace in Switzerland. Every three minutes somebody buys an article on &lt;a href="http://www.ricardo.ch"&gt;ricardo.ch&lt;/a&gt; using a mobile device. ricardo.ch AG employs over 140 people in Switzerland and is headquartered in Zug.&lt;/p&gt;&#xD;
39
  &lt;h2&gt;About Diglin&lt;/h2&gt;&#xD;
40
  &lt;p&gt;&lt;a href="http://www.diglin.com"&gt;Diglin&lt;/a&gt; is the Swiss eCommerce Agency per excellence, realizing your eCommerce project with success. It will accompany along the whole life of your eCommerce project at any levels: conception, realization, design, marketing, logistic, data treatment and management, resource optimization, cost efficiency, increase in turnover, etc. Diglin concentrates its activities mainly with the solutions Magento (eCommerce), OroCRM (CRM) and Akeneo (PIM) and work with its partners highly qualified to provide you the best solutions regarding your needs. &lt;/p&gt;</description>
41
- <notes>## Version 1.0.18&#xD;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  - Add improvements brought by the ricardo library&#xD;
43
  &#xD;
44
  ## Version 1.0.17&#xD;
@@ -170,9 +197,9 @@
170
  - be2b77a Update readme file&#xD;
171
  - 9384e3c Update doc</notes>
172
  <authors><author><name>diglin</name><user>diglin</user><email>sly@diglin.com</email></author></authors>
173
- <date>2015-02-21</date>
174
- <time>12:57:12</time>
175
- <contents><target name="mageetc"><dir name="modules"><file name="Diglin_Ricento.xml" hash="0400f55950fe9fd6c4782d6a25096efd"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ricento.xml" hash="79e497f5579ce1502bfa7ba4c17f703f"/></dir><dir name="template"><dir name="ricento"><dir name="dashboard"><file name="account.phtml" hash="721e0700d0727abfd334e0d7261125c0"/><file name="bestsellers.phtml" hash="dbf7e986a70570fbd93b00c8b94c8768"/><file name="lifeturnover.phtml" hash="afdb1473c032c29315d907c0fb9e23c3"/><file name="news.phtml" hash="8abeac40e6a1950dce9a458d5a24e03f"/><file name="toolbar.phtml" hash="bb8cdc414fcbad9e7111d925a4bb0337"/><dir name="turnover"><file name="graph.phtml" hash="9f020c65b6076f53768236aec5cb7488"/></dir><file name="turnover.phtml" hash="8a2f2f81bf24087f65f72714ff246f6a"/></dir><file name="dashboard.phtml" hash="40515120ea2e2d113d7b64ec8079a33d"/><file name="iframe.phtml" hash="ceff9c6473bc99059858f0059c70433a"/><dir name="js"><dir name="rules"><dir name="validate"><file name="paymentshipping.phtml" hash="03dd071f6cd33e8ccbadb6576cfe761a"/></dir></dir><dir name="salesoptions"><dir name="validate"><file name="increment.phtml" hash="2f8fd684a6db6578f3874b712c3f997b"/></dir></dir><dir name="sync"><file name="progress.phtml" hash="e3c9f623598415e5ccdf45e55f0c1be0"/></dir></dir><file name="log.phtml" hash="0fc1c53f6579e4028fbbff693c3dbdea"/><dir name="notifications"><file name="configured.phtml" hash="fd2df9a93f5d614ee13e61355310af5f"/><file name="expiration.phtml" hash="e1d6af0637c730a92270c20b080dc701"/></dir><dir name="payment"><dir name="info"><file name="default.phtml" hash="9691b579210d12fb88ba5cdd2d9f5df4"/><dir name="pdf"><file name="default.phtml" hash="7c0d2d0d4c2a02f19b0e86e379ebc7fd"/></dir></dir></dir><dir name="products"><dir name="category"><file name="children.phtml" hash="5d56d655a093f383e6cd39a62f51253a"/><file name="mapping.phtml" hash="3aa90c2a05663ae1a95b91020c3d2d05"/></dir><dir name="listing"><dir name="item"><dir name="edit"><file name="form.phtml" hash="cffc18c1f5a97d3a356ca66cd7ad22c1"/></dir><file name="preview.phtml" hash="5c666dd6960484d8032bd6ad19cd997b"/></dir></dir></dir><file name="support.phtml" hash="833a47ebeabb9f68e801db149925f274"/><dir name="sync"><dir name="check"><file name="popup.phtml" hash="43026d5a13b3cd152d4503c455396d6c"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="ricento"><dir name="payment"><dir name="info"><file name="default.phtml" hash="c1d4e98ba0bf30f501116b923d6d1d01"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="ricento"><dir name="css"><dir name="images"><file name="ajax-loader.gif" hash="73e57937304d89f251e7e540a24b095a"/><file name="arrow_sans_right_32.gif" hash="276b86bab75976c98e3c5202916d927a"/><file name="monotone_check_yes_ok.png" hash="b7b1d4c572e0c2ed10435a802549ae64"/><file name="ricardo_16x16.png" hash="5987591334d1b58f66ae4db2683fa8fd"/><file name="ricardo_32x32.png" hash="0635c69692c26a4bd4707a91336d9b3b"/><file name="settings_icon.png" hash="4bdae9a6199655027b8b8aeee8f80ce4"/><file name="warning_msg_icon.gif" hash="4cf6ec7f59ab09f9c18b3a4301714c6d"/><file name="window_maximize.png" hash="0f9c031e141822fed135270e34b128d5"/><file name="window_minimize.png" hash="62e6795471543a0eff14a07bf271d8d7"/></dir><file name="ricento.css" hash="c714e583ec2cca702f1d660258351c74"/></dir><dir name="images"><file name="KB.png" hash="187e953f8ebf9fe5829ec31427ff853b"/><file name="contact.png" hash="85ed8d8113a897128ab1263e23b69dbb"/><file name="diglin.png" hash="cb24b7fec64fd8f906375d497b7e5e0f"/><file name="diglin@2x.png" hash="0e834d7839f61e789db16c028100b6ff"/><file name="online-support-48.png" hash="70f55fb3bc678875eaf53dfb214d7d3d"/><file name="ricardo.png" hash="21beeb511cf31d16ebc6b9d947806447"/><file name="ricardo@2x.png" hash="af83978f369def1e4e87fc06e4903c61"/><file name="settings-13-48.png" hash="3dc22c1da4f952687699e5fc23028232"/><file name="sinchronize-48.png" hash="15735cf3ca563303d9e981faba075750"/><file name="statistics-48.png" hash="38046c16959de9ee22b1679d4ddf3909"/><file name="view-details-48.png" hash="a8bbab2e728f1723e9e17dce5f939b22"/></dir></dir></dir></dir></dir></target><target name="magecommunity"><dir name="Diglin"><dir name="Ricento"><dir name="Block"><dir name="Adminhtml"><dir name="Config"><dir name="Source"><file name="Heading.php" hash="1b9e577a0bfe5a42aa56df6a8ebd1435"/><file name="Hint.php" hash="92c6544c580f5b6be1074a0b934ac1a8"/></dir></dir><dir name="Dashboard"><file name="Account.php" hash="831f9df909aad24915521c9878662796"/><file name="Bestsellers.php" hash="8bf0788c2aef1826bfa5b669c7656225"/><file name="Lifetime.php" hash="20812f8bb25ced84a74130fb94192789"/><file name="News.php" hash="6ee052d661649e532b9d1ca4678a572a"/><file name="Turnover.php" hash="44aa47c73689a4f5a8ee40402d858412"/></dir><dir name="Form"><dir name="Element"><dir name="Checkboxes"><file name="Extensible.php" hash="5b783bffcb8e2188fd2f52debde69cb3"/></dir><dir name="Fieldset"><file name="Inline.php" hash="f221c017193c30e6efea30e8f624fae8"/></dir><dir name="Radios"><file name="Extensible.php" hash="5c785e8774051e7139d2dd1f7aeba177"/></dir></dir></dir><dir name="Log"><file name="Tabs.php" hash="c7b7b5e96a7074327b69674b1099cdfd"/></dir><file name="Log.php" hash="60c3d1c8cea9e7cf9325758e0940dc58"/><dir name="Notifications"><file name="Default.php" hash="690c878a7542619cd553650b9c9937c2"/><file name="Expiration.php" hash="c2fb100eae64a44ce6ddd920ebc85993"/></dir><dir name="Page"><file name="Menu.php" hash="ebc522d7ec049ae74f8d875e966d5b30"/></dir><dir name="Products"><dir name="Category"><file name="Children.php" hash="2647a27a377c0b0e0932a3e7913c33c3"/><dir name="Form"><dir name="Renderer"><file name="Categories.php" hash="4c04c74824999ea37d3da78b62cfa4aa"/><file name="Mapping.php" hash="f3b9e760f121e12945379dcbfce6bb7f"/></dir></dir><file name="Mapping.php" hash="9363eabd982500f7dc94a0cde4b616cb"/><dir name="Tree"><file name="Categories.php" hash="880c01a733b66e8b9a498614e4d84155"/><file name="Form.php" hash="f1d65d2f0f93ba25d64395e927c59ddd"/></dir><file name="Tree.php" hash="fee8a88acf8b75ad9bffc0ebb42977a9"/></dir><dir name="Listing"><dir name="Edit"><file name="Form.php" hash="09d66313ce5d3d1971466f727fa54d98"/><dir name="Tabs"><file name="General.php" hash="4a4f0f32f345abb8e8f241019de9894c"/><dir name="Products"><file name="Add.php" hash="78ad0df36727802683604f424be733fd"/><file name="Massaction.php" hash="43ff8b5fe06da98e2a2245438b5b20e2"/><dir name="Renderer"><file name="Article.php" hash="57729949e2e36a6aca34efac2c9f9acb"/><file name="Configured.php" hash="38d3f8f1fd15089bd9cce0387e995bfe"/><file name="Customoptions.php" hash="54d951895000a930bb10aa51f29252e0"/><file name="Inventory.php" hash="eb93eeabdef7e1ed8549ca3ef5108111"/><file name="Name.php" hash="bb228542b56e4efd561c60880f82af9c"/><file name="Status.php" hash="04bd3a30129fa6edf47d2b45da85a30f"/></dir></dir><file name="Products.php" hash="e3d22c2b6539fe4b157b9bd8c9eb3515"/><file name="Rules.php" hash="0bd7d32068353bc964ad55a1d0be5ec6"/><file name="Selloptions.php" hash="14ef094147aac68b831aa60987e893a2"/></dir><file name="Tabs.php" hash="3bda2bae74655bee0098d9565f8540af"/></dir><file name="Edit.php" hash="28619f80fd7749ed149a99a58211505d"/><dir name="Form"><file name="Abstract.php" hash="c6c96222f6e97f7dcbeb739d9d7f9e9d"/></dir><dir name="Grid"><dir name="Renderer"><file name="Status.php" hash="7afd093267066a6b64f1b8aa0ef10a77"/><file name="Total.php" hash="3cef3bc818d142112074b98b2ea147dd"/></dir></dir><file name="Grid.php" hash="9fe5406d144cc378eacc7fd765fdfb44"/><dir name="Item"><dir name="Edit"><file name="Form.php" hash="1bea95f9828ddd7cfcb263d9ae7bb2ad"/><dir name="Tabs"><file name="Rules.php" hash="2c4deaefc77a26046f8ee61369418f6c"/><file name="Selloptions.php" hash="4203741455961ba6bd69c9c3de4374b5"/></dir><file name="Tabs.php" hash="da6d63859701c0190d1d29e7ced2ba02"/></dir><file name="Edit.php" hash="553d68c6477a9506b9fdb40f10c1cc70"/><file name="Preview.php" hash="41707e3549037213eb4c4776499f6528"/></dir><dir name="Log"><file name="Grid.php" hash="d63e0781210dadbb734a685d5e45a662"/></dir><file name="Log.php" hash="16325d1d0d5c15fde9129bbc5ad20de7"/><dir name="New"><file name="Form.php" hash="bdf6634e3f98ed173e017ec35a458d48"/></dir><file name="New.php" hash="56a927670c10977b38642ac83c6aba9f"/></dir><file name="Listing.php" hash="55130512f435a7038c8699dcfed7ca74"/></dir><dir name="Sync"><dir name="Log"><dir name="Grid"><dir name="Renderer"><file name="Progress.php" hash="ac7a88d269f5f6d9defcccd45f529f24"/><file name="Title.php" hash="41a018d4e8bb2e85ca8f79306ef6a922"/></dir></dir><file name="Grid.php" hash="81485cfa9f270c635b9b46e483115778"/></dir></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Button.php" hash="53e5128befe7c5f3be2208676fab5019"/></dir></dir></dir></dir></dir><dir name="Payment"><file name="Info.php" hash="8e8d94437f9ef871b74c1040feeb7994"/></dir><file name=".DS_Store" hash="e06a4f2ff746369d1a5e06571b602c51"/></dir><dir name="Controller"><dir name="Adminhtml"><file name="Action.php" hash="d36ba0aade286fead4dc53994d9a84df"/><dir name="Products"><file name="Listing.php" hash="30891082a88f2f255a2c6f03ceb83f2d"/></dir></dir><file name=".DS_Store" hash="40d57ae8429c64fd49076cb87e836d56"/></dir><file name="Exception.php" hash="9e256dfaf217890f0decb2af39d76f1d"/><dir name="Helper"><file name="Api.php" hash="b3684a0400ae9906f8c5d349c3dd6f2c"/><dir name="Dashboard"><file name="Turnover.php" hash="f4ddfb6a7913727ea0f7f449685fac9e"/></dir><file name="Data.php" hash="0e23344560d5c893a819355df330797e"/><file name="Price.php" hash="09d1f3d33a86a53b39f644a0a839a467"/><file name="Tools.php" hash="117ef7c674770a45f169a8e68308c6a6"/></dir><dir name="Model"><dir name="Api"><dir name="Services"><file name="Abstract.php" hash="d2dc819066eab94bd126ece5295442e7"/><file name="Customer.php" hash="260d1eb0945b5695a629a4f88f3a3d1f"/><file name="Security.php" hash="3f13d3760ef6c23bc3572b4938cae0a1"/><file name="Sell.php" hash="f8b5b8a4dce7b28abae7ebea7b25a7b3"/><file name="Selleraccount.php" hash="f4f61a851ae586707716600161ba9d5c"/><file name="System.php" hash="10e29653705a17bece5754b718eb0dee"/></dir><file name="Token.php" hash="8673292ac89b012fc65687b1b3c4247f"/></dir><dir name="Config"><dir name="Source"><file name="Abstract.php" hash="695504f1b3515b6654b85c40b73e64e6"/><file name="Categories.php" hash="0af5fa83a313d3484fb36d2923f7d2c4"/><file name="Languages.php" hash="a5e14b0b61472dfcd549a46b4a796f75"/><dir name="Products"><dir name="Listing"><file name="Log.php" hash="8c0d89ee2dc9de58516ff90117f6be4d"/><file name="Status.php" hash="ffcfa94866f587c8f1312c235ab2bc9b"/></dir></dir><dir name="Rules"><file name="Payment.php" hash="755f2df78cfadef0289c2fc0bd7692dc"/><dir name="Shipping"><file name="Availability.php" hash="4317e445dcf1fe6aa3a3b78e0b3a5838"/><file name="Calculation.php" hash="634ea9354bbb7b8ea3d9c2aca3d262a5"/><file name="Packages.php" hash="61dff0d789aa1f03d06dbaca140d2fbb"/></dir><file name="Shipping.php" hash="d56bb5e5046176de881cfc614adf1c62"/></dir><dir name="Sales"><file name="Currency.php" hash="602f4a298855b2256fb33ec13e798962"/><file name="Days.php" hash="77404c8275a1fa56b1cbe09851d7fad0"/><dir name="Order"><file name="Status.php" hash="3140356e10661527a56903f7571b07ac"/></dir><dir name="Price"><file name="Method.php" hash="c4d961d0072167cd519e0784ec2c37b2"/><file name="Source.php" hash="aceb75016e63a4ac3f2de5a159d9987e"/></dir><dir name="Product"><dir name="Condition"><file name="Source.php" hash="c5854341ad66b09ecd5859d99430a032"/></dir><file name="Condition.php" hash="2577a4471e8df64beb87fc562ef24cd1"/></dir><file name="Promotion.php" hash="cff96346acb628215d864e4c9747a109"/><file name="Reactivation.php" hash="7175d66961547741fa1f6d18999a32cc"/><file name="Template.php" hash="109e5c6b8b0226cb0a6191a60fc4f364"/><file name="Type.php" hash="cf87da8e22708e912e330dad295078c2"/><file name="Warranty.php" hash="9f5f9822b26c2686094f01e91b99c6e8"/></dir><file name="Status.php" hash="2eef5b7122745b8e20ae3d5f1777919a"/><file name="Store.php" hash="67de35f42ee609fd5d47943544e2322d"/><dir name="Sync"><file name="Progress.php" hash="6c3f7a92c29bf9ee03d6de06472ed362"/><file name="Status.php" hash="5116bc6be1dc24d617ca81afa38559b6"/><file name="Type.php" hash="f59219f8b71f70bceac16ceee93067b7"/></dir><file name="Website.php" hash="378c7811be82c2a4759f97959ea66fbc"/></dir></dir><file name="Cron.php" hash="1dc130b0d84e01942c1296cf7f09cd53"/><dir name="Dispatcher"><file name="Abstract.php" hash="4e30ed63a0658678baa8d4c50c976fea"/><dir name="Check"><file name="List.php" hash="4774e5e2f52eb8951aa284640e78b48a"/></dir><file name="List.php" hash="b62f45dafbe4a242e4a44cfc5b0facf7"/><file name="Order.php" hash="38ca60ffa178ce3e17be26ff2d0564a5"/><file name="Relist.php" hash="2f76ae0f4e9b4475f3f9ff3eb6338ba7"/><file name="Stop.php" hash="82c0eec0ce1b768efdb7686ee1f8c222"/><dir name="Sync"><file name="List.php" hash="99a85e111c41b2b35ec29b58d672f909"/></dir></dir><file name="Dispatcher.php" hash="fb333ae13b19be43e04f5232637447de"/><dir name="Entity"><dir name="Attribute"><dir name="Source"><file name="Conditions.php" hash="f98bec0d57f61e1581f2b36936238338"/></dir></dir><file name=".DS_Store" hash="fe83316145ece365c6a0215405354801"/></dir><file name="Filter.php" hash="ae801fa0c3ed9172d3fb315d56777016"/><file name="Observer.php" hash="9483ce7c59d0b6d787f12d9e4bb820c8"/><dir name="Products"><dir name="Category"><file name="Mapping.php" hash="e5bd2e98f1c99153ce4fce12860af0f4"/></dir><file name="Category.php" hash="8262bfa487a79371fed1f4490e5211ef"/><dir name="Listing"><dir name="Item"><file name="Product.php" hash="1145e3054fa84448a1a0fc26c0950e5f"/></dir><file name="Item.php" hash="3cd6f71ef013255e00d7cacd41dd69f7"/><file name="Log.php" hash="503a113e7706aa4543423550ad192a38"/><file name=".DS_Store" hash="575220a7c4e08b15c60e4631b4986261"/></dir><file name="Listing.php" hash="f7999c9c315fe18b5b5e016176690c90"/><file name=".DS_Store" hash="878470ebfba5923e0c52147480052eda"/></dir><dir name="Resource"><dir name="Api"><dir name="Token"><file name="Collection.php" hash="965d69a03fd52793bb0ed4fdd07e1e09"/></dir><file name="Token.php" hash="2bf10158192d05a91ea95cc0f559a311"/></dir><dir name="Products"><dir name="Listing"><file name="Collection.php" hash="6cd9b5139e54434c8772728e73bbceaa"/><dir name="Item"><file name="Collection.php" hash="b2df2fdddc04d289d7a9ec3799551818"/></dir><file name="Item.php" hash="b18e8d39c661feec667b5ec9baa73d47"/><dir name="Log"><file name="Collection.php" hash="667cb38ab5f87e64952be6d5a3252e22"/></dir><file name="Log.php" hash="5f93d44c88263c1826f26b7044c68aa7"/></dir><file name="Listing.php" hash="2e46ff304a0059337bce505854b1f418"/></dir><dir name="Rule"><file name="Collection.php" hash="2ff51b66463e1e198a9a48e7c923cf19"/></dir><file name="Rule.php" hash="2a247c0dae1372bbb8035aeab6e78c55"/><dir name="Sales"><dir name="Options"><file name="Collection.php" hash="ee8f2d85c57e717e91125cf61f4ec274"/></dir><file name="Options.php" hash="f05ba7087b4cf72c9e419ac74c83d90f"/><dir name="Transaction"><file name="Collection.php" hash="79e8c31484050541c9f67c6bac0ad654"/></dir><file name="Transaction.php" hash="8fd26b31b122a238d862b5052f532c78"/></dir><dir name="Sync"><file name="Abstract.php" hash="385639551762ab46c4b93f43957e703b"/><dir name="Job"><file name="Collection.php" hash="008d006934d0f2cef9f5e92a609df550"/><dir name="Listing"><file name="Collection.php" hash="8fc712c8e19d52b609f920f037b48604"/></dir><file name="Listing.php" hash="4d1843b200eb7821c120ac9aff7dbd6f"/></dir><file name="Job.php" hash="1de0a5f2531d91184d3e751c40ea0145"/></dir></dir><file name="Rule.php" hash="5dee4613b128ff66230e52d6fe84c4ff"/><dir name="Sales"><dir name="Method"><file name="Payment.php" hash="1955c942bcd2e829451567a18d4a117a"/><file name="Shipping.php" hash="06dcef5eafcd7cdf1b66b711dbe642b6"/></dir><file name="Options.php" hash="19f65cfdf285f67c183e214f2779b84a"/><file name="Transaction.php" hash="40d924c032daf8b579a31c1e3945423c"/><file name=".DS_Store" hash="fc3f9eaffb36b68be6d5f78dd42aa4de"/></dir><file name="SplAutoloader.php" hash="5c3aa48d6c93900c10625b8e92279672"/><dir name="Sync"><file name="Abstract.php" hash="bc6bded1af4c1e2b731c17816a0c763e"/><dir name="Job"><file name="Listing.php" hash="d9ac0120516bc17824de1110565d20e7"/></dir><file name="Job.php" hash="f769dbadc38b970a232b7e28ecc7744f"/></dir><dir name="Validate"><dir name="Products"><file name="Item.php" hash="d435b609eac7e7769046506106629462"/></dir><dir name="Rules"><file name="Methods.php" hash="a9ab692003c0870b39b1576c3d5bf800"/></dir><dir name="Sales"><file name="Increment.php" hash="c8e3fc17c8d92a6164c9924880b6de48"/></dir></dir><file name=".DS_Store" hash="4b9de9ebd62222444a1aa7a41016fa50"/></dir><dir name="Test"><dir name="Model"><dir name="Rule"><dir name="Validate"><dir name="expectations"><file name="testPaymentMethodCombinations.yaml" hash="c1070f1ae555a8c32a7761980e589857"/></dir><dir name="providers"><file name="testPaymentMethodCombinations.yaml" hash="0dfd5c1d335e10540607a391b33a9a2c"/></dir></dir><file name="Validate.php" hash="a9f4d3dcaa3614c049e8fdfdd1a68f44"/></dir><dir name="Sales"><dir name="Validate"><dir name="Increment"><dir name="expectations"><file name="testStartPriceIncrementCombination.yaml" hash="15ffe7bd8373cda25aed179c08171881"/></dir><dir name="providers"><file name="testStartPriceIncrementCombination.yaml" hash="345726c8c358be678a93c38fbff504dc"/></dir></dir><file name="Increment.php" hash="fdad60d6adb7d4a365d2c5610f3fb2ae"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="AccountController.php" hash="fa0950bcfe644646b1a3a7314439ba89"/><file name="ApiController.php" hash="1d819f728e0176762b5f452d10213225"/><file name="DashboardController.php" hash="c8c0c9b082c15cc6a47beb29e85509e4"/><file name="IndexController.php" hash="f31e3da1a8b1cb4182ef25bb0d0d7edd"/><file name="LogController.php" hash="c6b922c45fad66a2d9ffa47f8774ebd2"/><dir name="Products"><file name="CategoryController.php" hash="34a122f678feeccb7aeec69386687aec"/><dir name="Listing"><file name="ItemController.php" hash="8eed99fb352357e39386887ce0997813"/></dir><file name="ListingController.php" hash="46ee9f56d63c5ba372711565c80d40f9"/></dir><file name="SupportController.php" hash="e2de494551ad62f034bab728bab7b726"/><file name="SyncController.php" hash="56d00095f40cae50055d9b10199a7c38"/></dir><file name=".DS_Store" hash="df6bc97f898d348cf05b8fdaf6f86f94"/></dir><dir name="data"><dir name="ricento_setup"><file name="data-install-1.0.0.php" hash="60ef0aefde5dd27f7cdf367cdbf38897"/></dir><file name=".DS_Store" hash="5617a58254bcd0775ce28c476de08b69"/></dir><dir name="etc"><file name="adminhtml.xml" hash="25ff4203e40e3e2586e0c791034b8d14"/><file name="config.xml" hash="1c6001bbc5c576e2b583dc4db185aeda"/><file name="jstranslator.xml" hash="83ae42ac65b5a018683363946c39e4b3"/><file name="system.xml" hash="c95ee7c701b124e33f74d3cf3113155a"/><file name="uninstall.txt" hash="660b44580246f818f8e22f4c5a530c9b"/></dir><dir name="sql"><dir name="ricento_setup"><file name="install-1.0.0.php" hash="482b11fe5d2955e765dad8091ceaaca1"/><file name="uninstall.php" hash="db8ca6cd93e8bad1a5ee79853b3c21c3"/><file name="upgrade-1.0.8-1.0.9.php" hash="a00b2e8c48683d6d7760f2324067701f"/></dir></dir><file name=".DS_Store" hash="e14e8f677dad63148ad3e2b670cfbbe2"/></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Diglin_Ricento.csv" hash="7388da66396006f87fafd92aaf3a6675"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir><dir name="fr_FR"><file name="Diglin_Ricento.csv" hash="dec7fd7d5e5425ca6a4dcdf71fbe1008"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir><dir name="de_DE"><file name="Diglin_Ricento.csv" hash="d7a4795c886690ddefbd06a4e9767bde"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir><dir name="de_CH"><file name="Diglin_Ricento.csv" hash="5c537c6e959d10516788d402b39afe18"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="ricento"><file name="Countable.js" hash="dc66f2e57b917e39f897f254bcc8ec1b"/><file name="adminhtml.js" hash="b5a3228d2800817041948c16d6c2f7b5"/><dir name="livepipe-ui"><file name="livepipe.js" hash="d15a0747cdc197a7f7081d5be4f20d01"/><file name="progressbar.js" hash="2153c666af9b91c65111124665cb57f7"/></dir></dir></dir></target><target name="magelib"><dir name="Diglin"><dir name="Ricardo"><file name="Api.php" hash="73f8e9d05239745c615caa9bba75ec78"/><dir name="Composer"><file name="Magento.php" hash="2b1396d290496bd8e744d6d5b0be797e"/></dir><file name="Config.php" hash="1045568136c433270ddc178025d96a87"/><dir name="Core"><file name="ApiInterface.php" hash="c5a36ca69d27d76d913a2c4cb2d5876e"/><file name="ConfigInterface.php" hash="cd5d8d9eb5e0dd6946d4caf63f0cf6b2"/><file name="Helper.php" hash="689f24e1a6d2c51ebf09d5fb869a8238"/></dir><dir name="Enums"><file name="AbstractEnums.php" hash="8e401abbc33bdbab34223bb3f4950166"/><dir name="Article"><file name="ArticlesTypes.php" hash="e13b730e4c5656091305c6e8a1031b8f"/><file name="CloseListStatus.php" hash="d67f65e3de13cf6747e6e10bc0c1bb21"/><file name="InternalReferenceType.php" hash="6c8eddab52eea86efb142999f76e7b65"/><file name="PromotionCode.php" hash="67c1026f8d2e31e02083c99bdc1250b3"/><file name="Warranty.php" hash="ec403c6fe606572fdb7e92eda4e2eff0"/></dir><file name="ArticleErrors.php" hash="705927167cdc08eb4ada7d7ce055af22"/><dir name="Customer"><file name="ArticleTypeFilter.php" hash="1ae6e485167cb19da3eadd12efe9cc42"/><file name="OpenArticlesSortBy.php" hash="7b73af00d1a0af79ffa33d0281d2af28"/><file name="PaidStatusFilter.php" hash="b6ff931bebcfa37a09a5cab04fdb7448"/><file name="ShippedStatusFilter.php" hash="c906c8a60ea6e91f68bf1015dce18177"/><file name="SoldArticlesSortBy.php" hash="80c3241b09c3f61a1711a449404667e0"/></dir><file name="CustomerErrors.php" hash="38588fb9c5a425d490593dc5f23eb2d7"/><file name="GeneralErrors.php" hash="65c4369f521e99dfe8f20f0b0b5d67a3"/><file name="PaymentMethods.php" hash="4bfcb7bc7ab1181cb8cc544f050b5d6b"/><file name="PictureErrors.php" hash="ad7e4888ec4b8b43ab70b2154de4adc0"/><file name="PictureExtension.php" hash="9f76c645e57efed13f52d74c23a687e6"/><file name="SecurityErrors.php" hash="cb6112e33a4d8fb318e84e028181838b"/><dir name="System"><file name="CategoryArticleType.php" hash="8b680d1791cafec2e43907b144ad63c8"/><file name="CategoryBrandingFilter.php" hash="c7eb8c9d61adb8cc76ae3c47638fcfab"/><file name="LanguageCode.php" hash="6998c880c44fbdbe3b60321818976b9a"/><file name="LanguageId.php" hash="bcef589026b025591b4fa6bb9328fbbd"/></dir></dir><dir name="Exceptions"><file name="ArticleException.php" hash="b5290b26c6e711e6f1074f9d6687c066"/><file name="CurlException.php" hash="b1fa36bf6f663f942ec444dcc1e75044"/><file name="CustomerException.php" hash="d011aad98f970733f7eefe369f53fee6"/><file name="ExceptionAbstract.php" hash="8c868ba9a1a200aae3b59240b01faa70"/><file name="GeneralException.php" hash="18d42b47fd69a9b427cb4427a5d56e56"/><file name="PictureException.php" hash="ba3f6cc087f6b0103ecc96b4357ab0ac"/><file name="SecurityException.php" hash="b4b500a3f2abdc3bc957284d5fbc42a9"/></dir><dir name="Managers"><file name="Customer.php" hash="e2b3241594fecb5ef944466b34c8fbfe"/><file name="ManagerAbstract.php" hash="13dca083592bd0651f06a03fe9dd589a"/><file name="ParameterAbstract.php" hash="e9725c5915f48d375bef33f377247083"/><file name="Security.php" hash="b9dd72f0724ec454d023b4767b687116"/><dir name="Sell"><dir name="Parameter"><file name="AddArticlePicturesParameter.php" hash="8e607c9579f951f94a9bed199acc1145"/><file name="AppendArticleDescriptionParameter.php" hash="f38f51ff97640e024a4c08cc6eeab652"/><file name="AppendDescriptionParameter.php" hash="8140c7d52d1f33dbe621e889251b923f"/><file name="ArticleDeliveryParameter.php" hash="538e9e573bc7b81083e3febc8e325cf5"/><file name="ArticleDescriptionParameter.php" hash="98fef4f221b9f3a11ee9078bfd5116f0"/><file name="ArticleInformationParameter.php" hash="9900793d70875a80ca47d5d3e98691a9"/><file name="ArticleInternalReferenceParameter.php" hash="84cf8bcf50e6dda593b4f9570e1f6ed9"/><file name="ArticlePictureParameter.php" hash="aa7c36ccb2144513a9ea7b27966d2f3b"/><file name="CloseArticleParameter.php" hash="7f0a426ba4b277d9c02be87b5725cc45"/><file name="CloseArticlesParameter.php" hash="0f1e83fa7f9e9122b5f13f82769da8d1"/><file name="DeletePlannedArticleParameter.php" hash="f8a5b891046dd6b8ad4cf3d5e9f61cf2"/><file name="DeletePlannedArticlesParameter.php" hash="af2ec04803bb457b070fd73db749a72d"/><file name="InsertArticleParameter.php" hash="23707dad2636f8e0dda5423769f9e175"/><file name="InsertArticlesParameter.php" hash="0296ac97bd1ae645a5d88bc8b8df9558"/><file name="UpdateArticleParameter.php" hash="d9291f525d389cc2c45be6ad2d5213ea"/><file name="UpdateArticlePicturesParameter.php" hash="33962ef42331f70924399e6ddfcad2fc"/></dir></dir><file name="Sell.php" hash="6b76a8cd8402ba592ed9cb9ffd8a0538"/><dir name="SellerAccount"><dir name="Parameter"><file name="ArticlesParameter.php" hash="45b41edc80da0abca182528299e6013c"/><file name="ClosedArticlesParameter.php" hash="b45eb7085da6129b1b91218865016dcb"/><file name="OpenArticlesParameter.php" hash="601558abc262ec42d9d00f7ea7c0b044"/><file name="PlannedArticleParameter.php" hash="95c671b72c8b31a4dd396271bc5d13a2"/><file name="PlannedArticlesParameter.php" hash="f68737054ccda8cd5893f2448cbed2ee"/><file name="SoldArticlesParameter.php" hash="62c5d14074574da1e6d8b9d021ac8274"/><file name="UnsoldArticlesParameter.php" hash="75e878f0d7fb1b9ed5a72278fb433d78"/></dir></dir><file name="SellerAccount.php" hash="0b85ab146483730609c1ab6ecd7ba974"/><file name="System.php" hash="c2b865dcfc0875cd417ec902dc759f69"/></dir><file name="Service.php" hash="697c4d014f6d70f223c21b7e90bbb82f"/><dir name="Services"><file name="Customer.php" hash="465b82a364b820d53312e57973abb6f4"/><file name="Security.php" hash="3e82163587f9f61ea52c24f706335251"/><file name="Sell.php" hash="6f5a11fe96b20a6232207083abab9d16"/><file name="SellerAccount.php" hash="b946dd59b1e21a7ec23216406eb8a9af"/><file name="ServiceAbstract.php" hash="41b0fcbaff2a2df4baa925c58028a39b"/><file name="System.php" hash="ed174d4b1b1113fe512a6e0d5c4c5164"/></dir><file name=".DS_Store" hash="0cf3c0ae770601c1d2d9857aac981f36"/></dir></dir></target></contents>
176
  <compatible/>
177
  <dependencies><required><php><min>5.3.2</min><max>5.6.0</max></php></required></dependencies>
178
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>diglin_ricento</name>
4
+ <version>1.1.0</version>
5
  <stability>stable</stability>
6
+ <license>OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Sell your products from Magento to ricardo.ch and sync your order back into your shop to treat them.</summary>
38
  &lt;p&gt;With around 700,000 current offers (auctions and fixed price), 2.5 million brand-name articles on &lt;a href="http://www.ricardoshops"&gt;ricardoshops&lt;/a&gt;.ch, around 100,000 vehicles plus 35,000 parts and accessories on &lt;a href="http://www.autoricardo.ch"&gt;autoricardo.ch&lt;/a&gt; and over 2.3 million members, ricardo.ch is the largest online marketplace in Switzerland. Every three minutes somebody buys an article on &lt;a href="http://www.ricardo.ch"&gt;ricardo.ch&lt;/a&gt; using a mobile device. ricardo.ch AG employs over 140 people in Switzerland and is headquartered in Zug.&lt;/p&gt;&#xD;
39
  &lt;h2&gt;About Diglin&lt;/h2&gt;&#xD;
40
  &lt;p&gt;&lt;a href="http://www.diglin.com"&gt;Diglin&lt;/a&gt; is the Swiss eCommerce Agency per excellence, realizing your eCommerce project with success. It will accompany along the whole life of your eCommerce project at any levels: conception, realization, design, marketing, logistic, data treatment and management, resource optimization, cost efficiency, increase in turnover, etc. Diglin concentrates its activities mainly with the solutions Magento (eCommerce), OroCRM (CRM) and Akeneo (PIM) and work with its partners highly qualified to provide you the best solutions regarding your needs. &lt;/p&gt;</description>
41
+ <notes>## Version 1.1.0&#xD;
42
+ - NEW: add buttons to export configuration into a tar.gz archive and/or send it to support shop owner in case of issue with all necessary information: php, magento, installed modules version, ricardo and latest order tables from the database, log files. No customer information are saved.&#xD;
43
+ - NEW: support currency conversion based on the defined Magento currencies rate. It sets prices in CHF to ricardo.ch, products with price catalog in EUR/USD/... and does the opposite while importing a ricardo order in Magento (CHF to EUR/USD/...). Magento Currency Rates must be configured to work.&#xD;
44
+ - NEW: while selecting a ricardo category, you can now provide the product name to get a suggestion of the category/ies you may use&#xD;
45
+ - NEW: display a popup window with a summary of the fees for the current product list before to proceed "Check and List". Data of the form are saved when relevant before to display these fees&#xD;
46
+ - NEW: allow to merge short and description if ricardo description is missing at product level and if the extension is configured for that - Default "disabled"&#xD;
47
+ - NEW: support Magento Watermark Pictures&#xD;
48
+ - NEW: add ricardo banner in the dashboard of the extension&#xD;
49
+ - ENHANCEMENT: make description with carriage return to &lt;br&gt; HTML Tag configurable - default is 0&#xD;
50
+ - ENHANCEMENT: refactor order import process to reduce potential issues&#xD;
51
+ - ENHANCEMENT: add a new dispatcher to close articles properly for those which are not anymore available on ricardo.ch&#xD;
52
+ - ENHANCEMENT: global performance improvement with the ricardo API and product pictures (&gt; X MB - image attribute and media gallery)&#xD;
53
+ - ENHANCEMENT: configurable products and their options having price are computed differently, it fixes some issues with price calculation but also allow Fees calculation&#xD;
54
+ - ENHANCEMENT: links of the backend user interface depending on the user language are correctly defined (french or german)&#xD;
55
+ - ENHANCEMENT: related products of configurable products are displayed in the products grid of a list after a product is added or after the products listing is saved instead to wait that the product listing is checked&#xD;
56
+ - ENHANCEMENT: cleanup, factorize and perform code related to configurable products&#xD;
57
+ - ENHANCEMENT: set auto increment value of auction sales type to 1 per default&#xD;
58
+ - ENHANCEMENT: the inventory column in the products grid of the products listing has several meaning: 1) if the product is already listed, the value displayed is the quantity of product sent and still available on ricardo, 2) if the product is not yet listed, the quantity displayed is calculated based on the configuration at the product list or the product level, it will be automatically refreshed if the stock of the product changed before it is listed.&#xD;
59
+ - FIX: issue with price calculation when price scope is per website instead global&#xD;
60
+ - FIX: issue with grouped product quantity - default is 1 if related products don't have quantity defined&#xD;
61
+ - FIX: issue with order synchronization on Magento 1.7 and the ricardo payment method&#xD;
62
+ - FIX: issue with Internet Explorer when configuring a product and using defaults values are not expected&#xD;
63
+ - FIX: some translations issue&#xD;
64
+ - FIX: issue with shipping description while editing the configuration at product level into a products listing&#xD;
65
+ - FIX: memory issue due to pictures too big and API requirements (bytes array)&#xD;
66
+ - FIX: issue with MagentoConnect install&#xD;
67
+ &#xD;
68
+ ## Version 1.0.18&#xD;
69
  - Add improvements brought by the ricardo library&#xD;
70
  &#xD;
71
  ## Version 1.0.17&#xD;
197
  - be2b77a Update readme file&#xD;
198
  - 9384e3c Update doc</notes>
199
  <authors><author><name>diglin</name><user>diglin</user><email>sly@diglin.com</email></author></authors>
200
+ <date>2015-04-19</date>
201
+ <time>17:58:33</time>
202
+ <contents><target name="magecommunity"><dir name="Diglin"><dir name="Ricento"><dir name="Block"><dir name="Adminhtml"><dir name="Config"><dir name="Source"><file name="Heading.php" hash="b433ef94dec29580215fc43109ee8f8c"/><file name="Hint.php" hash="b7a7ba331d22590f59bfe8281241a4f0"/></dir></dir><dir name="Dashboard"><file name="Account.php" hash="8724a08f3683b47aaa2f72496cc70b6e"/><file name="Banner.php" hash="342cbe73ba3b32f9bdc8313149ec931a"/><file name="Bestsellers.php" hash="a9432528b536631a678319e82afeeeec"/><file name="Lifetime.php" hash="e3a70e02e94f980f9d1aaf0ecf9a20bb"/><file name="News.php" hash="6ee052d661649e532b9d1ca4678a572a"/><dir name="Renderer"><file name="Price.php" hash="0fc32c2882a63176370bef21733e9e21"/></dir><file name="Turnover.php" hash="5e6865955e7a9698593a53fec3726676"/></dir><dir name="Form"><dir name="Element"><dir name="Checkboxes"><file name="Extensible.php" hash="bc4c39a051f7a159f5e23dff34ad811d"/></dir><dir name="Fieldset"><file name="Inline.php" hash="292183da97b985cecc1b6d1ce1ee4a35"/></dir><dir name="Radios"><file name="Extensible.php" hash="0bd7bcc853668d572fa21be57bb47575"/></dir><file name=".DS_Store" hash="3005ca0f8e620e6556f5b6dd53202170"/></dir><file name=".DS_Store" hash="ceb8d57fd395cb333d8dc1f85dfcc856"/></dir><dir name="Log"><dir name="Listing"><file name="Grid.php" hash="6d8bf3d0cbeb07df6698ce5e3cc6da61"/></dir><dir name="Sync"><dir name="Grid"><dir name="Renderer"><file name="Progress.php" hash="2c641830c3db9983ea8e43251f72e907"/><file name="Title.php" hash="329af6b8bede66748d82b85524ceae52"/></dir></dir><file name="Grid.php" hash="ed1b6b85b7d94acf4327e2975a953742"/></dir><file name="Tabs.php" hash="e08d00e946c5007c767757d060f2cc6d"/></dir><file name="Log.php" hash="f08554f883e53cc040248edd7118bd4f"/><dir name="Notifications"><file name="Default.php" hash="167bfaa55e28c709dbf3697d7830a71a"/><file name="Expiration.php" hash="df67759b72214cd362b0db736b585859"/></dir><dir name="Page"><file name="Menu.php" hash="0a6dde8103fb1444621ccdf484957c02"/></dir><dir name="Products"><dir name="Category"><file name="Children.php" hash="307e037abc251848b0694b3529edfbfc"/><dir name="Form"><dir name="Renderer"><file name="Categories.php" hash="76c3af26e9c3aa7c3d9f09d941997d57"/><file name="Mapping.php" hash="577e4fc684f8939deba30eb67dbd174c"/></dir></dir><dir name="Mapping"><file name="Tree.php" hash="524d1d3387fbaa130552aca4e0591598"/></dir><file name="Mapping.php" hash="cc5b960ad5aa5a25380435eccb157856"/><dir name="Tree"><file name="Categories.php" hash="515975899617d335d6976e27ef7b573d"/><file name="Form.php" hash="d81bbe3285b496dc3c14625aa9b91e03"/></dir><file name="Tree.php" hash="8aa9c622715b021a8e857410b881b68c"/></dir><dir name="Listing"><file name="Confirmation.php" hash="cdb2ceca5b00a34d5a947c91ca722cd6"/><dir name="Edit"><file name="Form.php" hash="e1a9fe7cab032a32ca3407a76ce7fbee"/><dir name="Renderer"><file name="Article.php" hash="cf0e96bc078ab23d5641f6f2022749c8"/><file name="Configured.php" hash="4660b7102533fa42a83eb37603cc76a7"/><file name="Customoptions.php" hash="64d5d9a0b2fb3a97145cee69eda09e0c"/><file name="Inventory.php" hash="d31d8c271abb1a78f3699064aaa506dc"/><file name="Name.php" hash="bb38f3924522574e64ba6e811ff46450"/><file name="Price.php" hash="b6112891273ff496374b2778227b4143"/><file name="Status.php" hash="b114cd85e41eca64fe57a6ff51d5ee43"/></dir><dir name="Tabs"><file name="General.php" hash="e698b88441f5b94cf1680d13668f0b3f"/><dir name="Products"><file name="Add.php" hash="13e1ebc227ba3518b9ec3bb600acd83c"/><file name="Massaction.php" hash="e9abc1d73fee5e1bb85569a80f37b9e5"/></dir><file name="Products.php" hash="33ffa7e18f36d06801bda306a477f563"/><file name="Rules.php" hash="7b913d102970f46fb8db6ec409322d7c"/><file name="Selloptions.php" hash="111b94ee6039995882b30f29ccbce570"/></dir><file name="Tabs.php" hash="6c3df947696a88a2509cfcf25a28c38b"/></dir><file name="Edit.php" hash="3218bc52a42c197113e595e09bf15623"/><dir name="Form"><file name="Abstract.php" hash="aa96a74bc83b7dae21a982812eb6fd90"/></dir><dir name="Grid"><dir name="Renderer"><file name="Status.php" hash="2ca46572afce5bf098489430a33c8592"/><file name="Total.php" hash="9570d3f5b50c043c0444d5fb3411f6f2"/></dir></dir><file name="Grid.php" hash="1d5c9ccc35e37b036754f41e950deda1"/><dir name="Item"><dir name="Edit"><file name="Form.php" hash="780650cb73819b55b355fe01119f703c"/><dir name="Tabs"><file name="Rules.php" hash="f8488f76c14247e25a61da9b03df0593"/><file name="Selloptions.php" hash="d4613fae72dd1fe3c68bff8419a82750"/></dir><file name="Tabs.php" hash="5d0781303281ae745d3609f907bd19d2"/></dir><file name="Edit.php" hash="b6ee4c68d4cd7732cfe0cdb3c488409f"/><file name="Preview.php" hash="ae9a2130c8488a90a17f9f86ab41e569"/></dir><file name="Log.php" hash="039a8bce6ee15ad9c49eb0d427c55c83"/><dir name="New"><file name="Form.php" hash="38ab04ded807490619a0e3b1cb75c9e0"/></dir><file name="New.php" hash="59eea06c9b8ec22162c3fcaeba2933e1"/></dir><file name="Listing.php" hash="8d604c1f0dab741cef0a06cb9065cdbc"/></dir><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Button.php" hash="67d754bed74b6389355d554b255e7488"/></dir></dir></dir></dir><file name=".DS_Store" hash="d7a2be9199a341b8ef1d7deab1c4d4f9"/></dir><dir name="Payment"><file name="Info.php" hash="c63a717a400752ec569657d2cd418195"/></dir><file name=".DS_Store" hash="743561b5031e5615f3d8b6bf7ed70f10"/></dir><dir name="Controller"><dir name="Adminhtml"><file name="Action.php" hash="cc992630b53816a388b8294775d27265"/><dir name="Products"><file name="Listing.php" hash="4d8ff57f2ec9e1f95253a4c577528816"/></dir></dir><file name=".DS_Store" hash="c32a70b9223330120d51e6eab360718f"/></dir><file name="Exception.php" hash="93c9bde391933089d1e6632cea5ad786"/><dir name="Helper"><file name="Api.php" hash="67ae3a1cc9a3a6ba9db34ed327865ae6"/><dir name="Dashboard"><file name="Turnover.php" hash="eda721699f2e5cf8e298e0024a63a545"/></dir><file name="Data.php" hash="9c65b0fb26089c707b3b65cece769bc5"/><file name="Image.php" hash="3a17e2215d96cf984b7c1409235de722"/><file name="Price.php" hash="616caafbcf1a171a9f773fedf9f62579"/><file name="Support.php" hash="6dd92c1efce7e3a25e51f6e92a34cee5"/><file name="Tools.php" hash="06e065102587129195f0d9fc02ea01b1"/></dir><dir name="Model"><dir name="Api"><dir name="Services"><file name="Abstract.php" hash="d0c76c198a2c69c199e726da03abc7a6"/><file name="Customer.php" hash="d500e9e9035ffd8500407611f6796ad9"/><file name="Search.php" hash="d40fd404bfb3a2d5de9d6020df14b483"/><file name="Security.php" hash="d5f1d425155e4749344850e7b09feb22"/><file name="Sell.php" hash="8b4476223aa515032bf311da5c4c548f"/><file name="Selleraccount.php" hash="c0d31d32fee8b7c6347b81202a1ba0e5"/><file name="System.php" hash="7c20e49754e5e93503fc3ef7e4918dc8"/></dir><file name="Token.php" hash="c470fe45490bccbeb5cce657a9c28488"/></dir><dir name="Config"><dir name="Source"><file name="Abstract.php" hash="d671ca4f2f26f145f5fad2e30b532124"/><file name="Categories.php" hash="f982ceecede3d42547a08e6a36f49218"/><file name="Languages.php" hash="2c03657ebf714148b73cb3f15ef4488c"/><dir name="Products"><dir name="Listing"><file name="Log.php" hash="ba3a7d1e422755cd6739bed8820066c0"/><file name="Status.php" hash="170990ec2272e76863bbdc88be6a023b"/></dir></dir><dir name="Rules"><file name="Payment.php" hash="4d14509c99fa3c4fc26037b246f78265"/><dir name="Shipping"><file name="Availability.php" hash="f97891bf6fdf0765d0289c43bb457a97"/><file name="Calculation.php" hash="912f16d303a9b401d1de9d37296dde0a"/><file name="Packages.php" hash="d4ce5652ae2a80eeb8839290dfb64ee6"/></dir><file name="Shipping.php" hash="e66853a3ea9b51a0900fdadba935ae42"/></dir><dir name="Sales"><file name="Currency.php" hash="b07535355281a36f3b7e358d23a77e15"/><file name="Days.php" hash="5643dd61f80ccc52cbe29e75f18df2d9"/><dir name="Order"><file name="Status.php" hash="a3718bb7ab59b4d60748dee241888651"/></dir><dir name="Price"><file name="Method.php" hash="020a8e8d0d9d35802ea88c0028af4673"/><file name="Source.php" hash="94c5e4b5eb86ced80e5412159e6cf0f4"/></dir><dir name="Product"><dir name="Condition"><file name="Source.php" hash="14849df28b52facc5d91f462e9a90781"/></dir><file name="Condition.php" hash="32faa3b36d1b7de9577798578152d044"/></dir><file name="Promotion.php" hash="dfd838cfe50880d8d2facbf3b062b398"/><file name="Reactivation.php" hash="33d9dd75eeb119eb3b05bbb4dda8e432"/><file name="Template.php" hash="ccffc7632cd03d87f0245cd801d0bae5"/><file name="Type.php" hash="6f545897bbe8b99d5b30e4102279b827"/><file name="Warranty.php" hash="8762d38677d82bc8048e3d5d88b36eae"/></dir><file name="Status.php" hash="c617e9ada56a3d41cabdea79695db149"/><file name="Store.php" hash="6930c1537e4ebf98885d5c333bec3ffa"/><dir name="Sync"><file name="Progress.php" hash="d0430a73504085929ba5f8a3e867da07"/><file name="Status.php" hash="f4b8e72c905175730b3d566dee80ade6"/><file name="Type.php" hash="bafd71290733c7c480595fb61ec81227"/></dir><file name="Website.php" hash="c0168510dc5252a0689416959882136b"/></dir></dir><file name="Cron.php" hash="2716340fd92fb30add28d7e89071540f"/><dir name="Dispatcher"><file name="Abstract.php" hash="592b07850f6760c9d4b0accfffa40672"/><dir name="Check"><file name="List.php" hash="6b9eef4d652debf6be1b333b73b737a0"/></dir><file name="Closed.php" hash="52464c4e48c494569354f6cc5b53ecaf"/><file name="List.php" hash="6e98480008fe6cc4e2c83602f8b9476c"/><file name="Order.php" hash="62543dafe93a6e98d1eed1c09c128a1f"/><file name="Stop.php" hash="e055d0a3ecd0fbb3605cb3b36a7a5bd4"/><dir name="Sync"><file name="List.php" hash="4d76f0768aef50bffa82cef89e7fe08a"/></dir></dir><file name="Dispatcher.php" hash="d00fda597c8a294d6d133aceb0f7c922"/><dir name="Entity"><dir name="Attribute"><dir name="Source"><file name="Conditions.php" hash="1223272c226b7bf7d1c6c61f27ef687e"/></dir></dir><file name=".DS_Store" hash="fe83316145ece365c6a0215405354801"/></dir><file name="Filter.php" hash="ec774cc9129c39ca4b1daf39eff0e59d"/><file name="Observer.php" hash="3ecec681ab0b48833e48b49487886432"/><dir name="Products"><dir name="Category"><file name="Mapping.php" hash="b6df1431d7310759e5be17f29eb10df0"/></dir><file name="Category.php" hash="642f0520f549d520e9050a0286a56358"/><dir name="Listing"><dir name="Item"><file name="Product.php" hash="2d69a177203ea4f15f08738ce8c10de1"/></dir><file name="Item.php" hash="18c861715a1c9980b8a9c01b73417b09"/><file name="Log.php" hash="992e843bdfd54aeac481cf6b2c678dbc"/><file name=".DS_Store" hash="575220a7c4e08b15c60e4631b4986261"/></dir><file name="Listing.php" hash="8877ce70cb6ddb612e2f25ccfc3092c3"/><file name=".DS_Store" hash="878470ebfba5923e0c52147480052eda"/></dir><dir name="Resource"><dir name="Api"><dir name="Token"><file name="Collection.php" hash="d2ab663440e27258841be3cf4a357a70"/></dir><file name="Token.php" hash="9899e9aa48e2ee7d416e840d575fff47"/></dir><dir name="Products"><dir name="Listing"><file name="Collection.php" hash="19b8f5d9d0107c897151d91e0cbae08e"/><dir name="Item"><file name="Collection.php" hash="c1d27c28e0c52f6f15641fe90cf2fba8"/></dir><file name="Item.php" hash="450a69ddd9023a40d1431f4a5c93a7db"/><dir name="Log"><file name="Collection.php" hash="c0b02c61246b76a31f2673931d90e985"/></dir><file name="Log.php" hash="514311bff0eee5b00e775c8b59b8b5a1"/></dir><file name="Listing.php" hash="afc905d5ba69ba5ddb7ee5fd946a8c2f"/></dir><dir name="Rule"><file name="Collection.php" hash="9c35a937efb27fe3fd57616621035ceb"/></dir><file name="Rule.php" hash="2ec8533cbc357e2a204dcf6bcbdb2d88"/><dir name="Sales"><dir name="Options"><file name="Collection.php" hash="fbc1af66e9ce3c33f47cab4853d5bd3e"/></dir><file name="Options.php" hash="dbb7e3ecf2c1716cdbbc8fa81b25bdda"/><dir name="Transaction"><file name="Collection.php" hash="f661980fd6a907df331cd7df1f211dd0"/></dir><file name="Transaction.php" hash="f81eb7d223ab9357598199150c1281a2"/></dir><dir name="Sync"><file name="Abstract.php" hash="15030d2414b0ad5dc99b56cd656f92e8"/><dir name="Job"><file name="Collection.php" hash="b9bd2b8a3a7271524e65898a5f1fbd68"/><dir name="Listing"><file name="Collection.php" hash="a713a5910489912448c85a9987635a45"/></dir><file name="Listing.php" hash="44ec78a770948d9504c1138ce1f41fe1"/></dir><file name="Job.php" hash="a7496261d34501fc9a5c56a87110c688"/></dir></dir><file name="Rule.php" hash="4ff575a44898a6b63cdb22dc1c3bb180"/><dir name="Sales"><dir name="Method"><file name="Payment.php" hash="9ba10f1ceb6f4a97cb02a852afbb7e15"/><file name="Shipping.php" hash="9f470328bb93cfbeec0de6c5b09e5e55"/></dir><file name="Options.php" hash="d6bb5ab7343e79f2341113b8b6a123d0"/><dir name="Order"><file name="Create.php" hash="fa28733d72ddc214510f64f559189bf3"/><file name="Exception.php" hash="74d31df9035a6145563b25e9a5b0324b"/></dir><file name="Transaction.php" hash="81133f876c4988ebcf89f9bad6a19cd3"/><file name=".DS_Store" hash="fc3f9eaffb36b68be6d5f78dd42aa4de"/></dir><file name="SplAutoloader.php" hash="5c3aa48d6c93900c10625b8e92279672"/><dir name="Sync"><file name="Abstract.php" hash="fc6ac3f307ea104c66fe4e758dd3a4a9"/><dir name="Job"><file name="Listing.php" hash="593875bf5d4d5588b684e39d833779b7"/></dir><file name="Job.php" hash="2374eb34968c83e0dde1b8aa684419f2"/></dir><dir name="Validate"><dir name="Products"><file name="Item.php" hash="97885da628dd972c058a4892873ad132"/></dir><dir name="Rules"><file name="Methods.php" hash="9dcfc409d29f8eeb301c109212f1956e"/></dir><dir name="Sales"><file name="Increment.php" hash="1f92ec9c6ca26d34bdb3981e777bda14"/></dir></dir><file name=".DS_Store" hash="553e418160037f4cbfb052e5441a987a"/></dir><dir name="Test"><dir name="Model"><dir name="Rule"><dir name="Validate"><dir name="expectations"><file name="testPaymentMethodCombinations.yaml" hash="c1070f1ae555a8c32a7761980e589857"/></dir><dir name="providers"><file name="testPaymentMethodCombinations.yaml" hash="0dfd5c1d335e10540607a391b33a9a2c"/></dir></dir><file name="Validate.php" hash="08260abb9a0bd685da4097916dfddc31"/></dir><dir name="Sales"><dir name="Validate"><dir name="Increment"><dir name="expectations"><file name="testStartPriceIncrementCombination.yaml" hash="15ffe7bd8373cda25aed179c08171881"/></dir><dir name="providers"><file name="testStartPriceIncrementCombination.yaml" hash="345726c8c358be678a93c38fbff504dc"/></dir></dir><file name="Increment.php" hash="e32cd91e3f683e5300cbb91ad6f2f093"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="AccountController.php" hash="384f2a7243924800fec9c10fcd9c912d"/><file name="ApiController.php" hash="9a1c834f6089fc6a027e470a915e5bbd"/><file name="DashboardController.php" hash="7f8935c4ca61e3b06181eec134d4649a"/><file name="IndexController.php" hash="e54b2a0a6e0e6ef898a22840683825dc"/><file name="LogController.php" hash="2102931b5793049ca3878b5767898e6a"/><dir name="Products"><file name="CategoryController.php" hash="a17f3bb5a8b0e1aec601d3d0e264fc2f"/><dir name="Listing"><file name="ItemController.php" hash="a7552ac3d1b36bd524b9a841c85e88ef"/></dir><file name="ListingController.php" hash="56caa8820ace97ff3bf0560e1be87e35"/></dir><file name="SupportController.php" hash="3bfca97a48b6f81fddd30518ef241962"/><file name="SyncController.php" hash="77315fd98363dab57a60bdd7b2e85c87"/></dir><file name=".DS_Store" hash="65204f7675cda0c4f9d7fd5069370de7"/></dir><dir name="data"><dir name="ricento_setup"><file name="data-install-1.0.0.php" hash="738f1d059e3968daea8592615106c7cf"/><file name="data-upgrade-1.0.18-1.1.0.php" hash="7f4480a5e13d64529e87219bc7f3348e"/></dir><file name=".DS_Store" hash="5617a58254bcd0775ce28c476de08b69"/></dir><dir name="etc"><file name="adminhtml.xml" hash="df9b5bfd9a38768a8e45d0ffe50d26a3"/><file name="config.xml" hash="751f8c9d7de3cc9fa65a1f00cf91fa55"/><file name="jstranslator.xml" hash="3a4a6307012f9660f925863659b38a2f"/><file name="system.xml" hash="0f0ff91da43aeeff664effde11cc68ec"/><file name="uninstall.txt" hash="660b44580246f818f8e22f4c5a530c9b"/></dir><dir name="sql"><dir name="ricento_setup"><file name="install-1.0.0.php" hash="bc9f3b05ae68e0d8899a066384566801"/><file name="uninstall.php" hash="d0e2d68583a950374796b1d817c2958f"/><file name="upgrade-1.0.18-1.1.0.php" hash="fcf5dae1df75bbd2bca9193eef430d75"/><file name="upgrade-1.0.8-1.0.9.php" hash="47e0ce995ae6d7aff77245cbf05d0832"/></dir></dir><file name=".DS_Store" hash="ff79823aee2df60e6912aa0d1cd5b071"/></dir></dir></target><target name="magelib"><dir name="Diglin"><dir name="Ricardo"><file name="Api.php" hash="dd24e52c73e1d8fcc4659c773418fa4c"/><dir name="Composer"><file name="Magento.php" hash="2b1396d290496bd8e744d6d5b0be797e"/></dir><file name="Config.php" hash="1045568136c433270ddc178025d96a87"/><dir name="Core"><file name="ApiInterface.php" hash="c5a36ca69d27d76d913a2c4cb2d5876e"/><file name="ConfigInterface.php" hash="cd5d8d9eb5e0dd6946d4caf63f0cf6b2"/><file name="Helper.php" hash="2485c9b90faaacf30dfd989adc0961f0"/></dir><dir name="Enums"><file name="AbstractEnums.php" hash="8e401abbc33bdbab34223bb3f4950166"/><dir name="Article"><file name="ArticlesTypes.php" hash="e13b730e4c5656091305c6e8a1031b8f"/><file name="CloseListStatus.php" hash="d67f65e3de13cf6747e6e10bc0c1bb21"/><file name="InternalReferenceType.php" hash="6c8eddab52eea86efb142999f76e7b65"/><file name="PromotionCode.php" hash="67c1026f8d2e31e02083c99bdc1250b3"/><file name="Warranty.php" hash="ec403c6fe606572fdb7e92eda4e2eff0"/></dir><file name="ArticleErrors.php" hash="705927167cdc08eb4ada7d7ce055af22"/><dir name="Customer"><file name="ArticleTypeFilter.php" hash="1ae6e485167cb19da3eadd12efe9cc42"/><file name="OpenArticlesSortBy.php" hash="7b73af00d1a0af79ffa33d0281d2af28"/><file name="PaidStatusFilter.php" hash="b6ff931bebcfa37a09a5cab04fdb7448"/><file name="ShippedStatusFilter.php" hash="c906c8a60ea6e91f68bf1015dce18177"/><file name="SoldArticlesSortBy.php" hash="80c3241b09c3f61a1711a449404667e0"/></dir><file name="CustomerErrors.php" hash="38588fb9c5a425d490593dc5f23eb2d7"/><file name="GeneralErrors.php" hash="65c4369f521e99dfe8f20f0b0b5d67a3"/><file name="PaymentMethods.php" hash="4bfcb7bc7ab1181cb8cc544f050b5d6b"/><file name="PictureErrors.php" hash="ad7e4888ec4b8b43ab70b2154de4adc0"/><file name="PictureExtension.php" hash="9f76c645e57efed13f52d74c23a687e6"/><file name="SearchErrors.php" hash="f16b01e7d62b76734a38776e546beb7f"/><file name="SecurityErrors.php" hash="cb6112e33a4d8fb318e84e028181838b"/><dir name="System"><file name="CategoryArticleType.php" hash="8b680d1791cafec2e43907b144ad63c8"/><file name="CategoryBrandingFilter.php" hash="c7eb8c9d61adb8cc76ae3c47638fcfab"/><file name="LanguageCode.php" hash="6998c880c44fbdbe3b60321818976b9a"/><file name="LanguageId.php" hash="bcef589026b025591b4fa6bb9328fbbd"/></dir><file name=".DS_Store" hash="cb1fb86d332d6cf020d9991723302c24"/></dir><dir name="Exceptions"><file name="ArticleException.php" hash="b5290b26c6e711e6f1074f9d6687c066"/><file name="CurlException.php" hash="b1fa36bf6f663f942ec444dcc1e75044"/><file name="CustomerException.php" hash="d011aad98f970733f7eefe369f53fee6"/><file name="ExceptionAbstract.php" hash="8c868ba9a1a200aae3b59240b01faa70"/><file name="GeneralException.php" hash="18d42b47fd69a9b427cb4427a5d56e56"/><file name="PictureException.php" hash="ba3f6cc087f6b0103ecc96b4357ab0ac"/><file name="SearchException.php" hash="ecd9902786eecb50414d3dd7e01b3492"/><file name="SecurityException.php" hash="b4b500a3f2abdc3bc957284d5fbc42a9"/></dir><dir name="Managers"><file name="Customer.php" hash="e2b3241594fecb5ef944466b34c8fbfe"/><file name="ManagerAbstract.php" hash="13dca083592bd0651f06a03fe9dd589a"/><file name="ParameterAbstract.php" hash="e9725c5915f48d375bef33f377247083"/><dir name="Search"><dir name="Parameter"><file name="GetCategoryBestMatchParameter.php" hash="14619ec6f6dc3e45d68930189cd27ec9"/></dir></dir><file name="Search.php" hash="3c8d6d52031bf00a9eeb672b291f43ae"/><file name="Security.php" hash="b9dd72f0724ec454d023b4767b687116"/><dir name="Sell"><dir name="Parameter"><file name="AddArticlePicturesParameter.php" hash="8e607c9579f951f94a9bed199acc1145"/><file name="AppendArticleDescriptionParameter.php" hash="f38f51ff97640e024a4c08cc6eeab652"/><file name="AppendDescriptionParameter.php" hash="8140c7d52d1f33dbe621e889251b923f"/><file name="ArticleDeliveryParameter.php" hash="538e9e573bc7b81083e3febc8e325cf5"/><file name="ArticleDescriptionParameter.php" hash="98fef4f221b9f3a11ee9078bfd5116f0"/><file name="ArticleInformationParameter.php" hash="9900793d70875a80ca47d5d3e98691a9"/><file name="ArticleInternalReferenceParameter.php" hash="84cf8bcf50e6dda593b4f9570e1f6ed9"/><file name="ArticlePictureParameter.php" hash="aa7c36ccb2144513a9ea7b27966d2f3b"/><file name="BaseInsertArticleWithTrackingParameter.php" hash="5fdeb6656f1b0ebdf9fb76c8ba5973df"/><file name="CloseArticleParameter.php" hash="7f0a426ba4b277d9c02be87b5725cc45"/><file name="CloseArticlesParameter.php" hash="cbdc9f2045c7e1b440b5252d63717947"/><file name="ClosePlannedArticleParameter.php" hash="5ee0ee9a0b79098ee38bf0a4f8420551"/><file name="DeletePlannedArticleParameter.php" hash="f86cb01ff7cb1b91ece3191cde3cf6e1"/><file name="DeletePlannedArticlesParameter.php" hash="5b094b5537aad744945877c2885cde3f"/><file name="GetArticleFeeParameter.php" hash="926f8960ce9162686d1eee03002ef5ca"/><file name="GetArticlesFeeParameter.php" hash="8d37fced5969657911facef553bf1f04"/><file name="InsertArticleParameter.php" hash="23707dad2636f8e0dda5423769f9e175"/><file name="InsertArticlesParameter.php" hash="4a6cdef758e32538ff4495d383567a4d"/><file name="UpdateArticleParameter.php" hash="d9291f525d389cc2c45be6ad2d5213ea"/><file name="UpdateArticlePicturesParameter.php" hash="33962ef42331f70924399e6ddfcad2fc"/></dir></dir><file name="Sell.php" hash="988998c316defb953db0c1a673ad7c52"/><dir name="SellerAccount"><dir name="Parameter"><file name="ArticlesParameter.php" hash="45b41edc80da0abca182528299e6013c"/><file name="ClosedArticlesParameter.php" hash="b45eb7085da6129b1b91218865016dcb"/><file name="OpenArticlesParameter.php" hash="601558abc262ec42d9d00f7ea7c0b044"/><file name="PlannedArticleParameter.php" hash="95c671b72c8b31a4dd396271bc5d13a2"/><file name="PlannedArticlesParameter.php" hash="f68737054ccda8cd5893f2448cbed2ee"/><file name="SoldArticlesParameter.php" hash="31aa25a901627cabf5b55c7f66a74f1b"/><file name="UnsoldArticlesParameter.php" hash="75e878f0d7fb1b9ed5a72278fb433d78"/></dir></dir><file name="SellerAccount.php" hash="0b85ab146483730609c1ab6ecd7ba974"/><file name="System.php" hash="c2b865dcfc0875cd417ec902dc759f69"/><file name=".DS_Store" hash="3f55d6d43043ccddf4ea7c5fc66d8c7d"/></dir><file name="Service.php" hash="697c4d014f6d70f223c21b7e90bbb82f"/><dir name="Services"><file name="Customer.php" hash="465b82a364b820d53312e57973abb6f4"/><file name="Search.php" hash="33f94a39029c57289a76bb85e2e05e13"/><file name="Security.php" hash="3e82163587f9f61ea52c24f706335251"/><file name="Sell.php" hash="e2b5c21046de7dc4c1822c94072f9449"/><file name="SellerAccount.php" hash="f01153d60678c43470a873fa83d6ae20"/><file name="ServiceAbstract.php" hash="41b0fcbaff2a2df4baa925c58028a39b"/><file name="System.php" hash="ed174d4b1b1113fe512a6e0d5c4c5164"/></dir><file name=".DS_Store" hash="427aa215b493870e633d065d3e546b86"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Diglin_Ricento.xml" hash="0400f55950fe9fd6c4782d6a25096efd"/></dir></target><target name="mageweb"><dir name="js"><dir name="ricento"><file name="Countable.js" hash="dc66f2e57b917e39f897f254bcc8ec1b"/><file name="adminhtml.js" hash="bee0f33367405c89f93a86512dbd8b22"/><dir name="livepipe-ui"><file name="livepipe.js" hash="d15a0747cdc197a7f7081d5be4f20d01"/><file name="progressbar.js" hash="2153c666af9b91c65111124665cb57f7"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ricento.xml" hash="47215c6d724221414017e391ec0f692b"/></dir><dir name="template"><dir name="ricento"><dir name="dashboard"><file name="account.phtml" hash="ad9d11463db769518a00fcf2d8f1bbb5"/><file name="banner.phtml" hash="9233cbde4520f4419ca87691906b48c5"/><file name="bestsellers.phtml" hash="c48282d7a83354f8054b20b751b9852e"/><file name="lifeturnover.phtml" hash="09c399dcd6aa68cb503c987a43aa3dce"/><file name="news.phtml" hash="799bab071c5a7b20b4c81f99824d3bc0"/><file name="toolbar.phtml" hash="49f2571e6545ca3cebfb027904381b56"/><dir name="turnover"><file name="graph.phtml" hash="96117aecbc0a074884357713482e5878"/></dir><file name="turnover.phtml" hash="0a85c63eef0863076504ee479c419e60"/></dir><file name="dashboard.phtml" hash="9f5db0d087823f15e6d428ae6dd773ec"/><file name="iframe.phtml" hash="e256fa4dec9eadf41f7c2b5f10ba48bd"/><dir name="js"><dir name="rules"><dir name="validate"><file name="paymentshipping.phtml" hash="8977da22325a8c1f469ce7eb4166f793"/></dir></dir><dir name="salesoptions"><dir name="validate"><file name="increment.phtml" hash="22d268c8498ad4ee3d6a18bdf42d2c26"/></dir></dir><dir name="sync"><file name="progress.phtml" hash="6e8c2dff5d024c7cb093b4df56f46ff3"/></dir></dir><file name="log.phtml" hash="1402eabd3eb946784c59c68a724738d9"/><dir name="notifications"><file name="configured.phtml" hash="f36530088576fdc4836a40012700f252"/><file name="expiration.phtml" hash="01d21a1804692ee9a83f9dd3f05d407b"/></dir><dir name="payment"><dir name="info"><file name="default.phtml" hash="d02bd6d4d642131f6aa845a230bbf658"/><dir name="pdf"><file name="default.phtml" hash="1ce97c0aead8d91b70f9bd4c8b03ee5e"/></dir></dir></dir><dir name="products"><dir name="category"><file name="children.phtml" hash="bfe6d5d5ba7cb24f4a0f3344af224f0c"/><dir name="mapping"><file name="tree.phtml" hash="3dabf207a79d32b143e00b397c4a041b"/></dir><file name="mapping.phtml" hash="25edee745a8baddd81556292976ec368"/></dir><dir name="listing"><file name="confirmation.phtml" hash="4a33fc972a5ccb1088b3f631d88b053c"/><dir name="item"><dir name="edit"><file name="form.phtml" hash="15557d807e5aa6b5b34285729e04c3af"/></dir><file name="preview.phtml" hash="2d40dcc958496d49f8f2a72d96e37d91"/></dir></dir></dir><file name="stats.phtml" hash="a2d523de72ac055fe9b85f923d2e7910"/><file name="support.phtml" hash="421232ce2c120b8e0aa1f4828a228fc8"/><dir name="sync"><dir name="check"><file name="popup.phtml" hash="4acc891d7ae7cb4cb07bc51ced5b438b"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="ricento"><dir name="payment"><dir name="info"><file name="default.phtml" hash="c1d4e98ba0bf30f501116b923d6d1d01"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="ricento"><dir name="css"><dir name="images"><file name="ajax-loader.gif" hash="73e57937304d89f251e7e540a24b095a"/><file name="arrow_sans_right_32.gif" hash="276b86bab75976c98e3c5202916d927a"/><file name="monotone_check_yes_ok.png" hash="b7b1d4c572e0c2ed10435a802549ae64"/><file name="ricardo_16x16.png" hash="5987591334d1b58f66ae4db2683fa8fd"/><file name="ricardo_32x32.png" hash="0635c69692c26a4bd4707a91336d9b3b"/><file name="settings_icon.png" hash="4bdae9a6199655027b8b8aeee8f80ce4"/><file name="warning_msg_icon.gif" hash="4cf6ec7f59ab09f9c18b3a4301714c6d"/><file name="window_maximize.png" hash="0f9c031e141822fed135270e34b128d5"/><file name="window_minimize.png" hash="62e6795471543a0eff14a07bf271d8d7"/></dir><file name="ricento.css" hash="8e7a0eddc9ee5855043f2da3915fcbc5"/></dir><dir name="images"><file name="KB.png" hash="187e953f8ebf9fe5829ec31427ff853b"/><file name="banner.png" hash="0b34711f9cdd44f07baef2b9b9536391"/><file name="contact.png" hash="85ed8d8113a897128ab1263e23b69dbb"/><file name="diglin.png" hash="cb24b7fec64fd8f906375d497b7e5e0f"/><file name="diglin@2x.png" hash="0e834d7839f61e789db16c028100b6ff"/><file name="github.png" hash="548d544d642e6afbba46dd2482f95af3"/><file name="online-support-48.png" hash="70f55fb3bc678875eaf53dfb214d7d3d"/><file name="ricardo.png" hash="21beeb511cf31d16ebc6b9d947806447"/><file name="ricardo@2x.png" hash="af83978f369def1e4e87fc06e4903c61"/><file name="settings-13-48.png" hash="3dc22c1da4f952687699e5fc23028232"/><file name="sinchronize-48.png" hash="15735cf3ca563303d9e981faba075750"/><file name="statistics-48.png" hash="38046c16959de9ee22b1679d4ddf3909"/><file name="view-details-48.png" hash="a8bbab2e728f1723e9e17dce5f939b22"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Diglin_Ricento.csv" hash="9fd6942f75642cabd8e443b40301a616"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/><file name="token_expiration.html" hash="d0214f1f7905f50328a1e13b0dd7a72d"/></dir></dir></dir></dir><dir name="fr_FR"><file name="Diglin_Ricento.csv" hash="271be12c233d047c0551794db4923a30"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir><dir name="de_DE"><file name="Diglin_Ricento.csv" hash="e34d2f9e90763c182abf716a1af67961"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/><file name="support.html" hash="6e381c94546829bfb963276e51cf731b"/><file name="token_expiration.html" hash="d0214f1f7905f50328a1e13b0dd7a72d"/></dir></dir></dir></dir><dir name="de_CH"><file name="Diglin_Ricento.csv" hash="e34d2f9e90763c182abf716a1af67961"/><dir name="template"><dir name="email"><dir name="ricento"><file name="admin_message.html" hash="40225dc7f1b06dae985c230bc4f3d0b7"/><file name="private_message.html" hash="3b2ea2a457b176194d91aeb54a05bb47"/></dir></dir></dir></dir></target></contents>
203
  <compatible/>
204
  <dependencies><required><php><min>5.3.2</min><max>5.6.0</max></php></required></dependencies>
205
  </package>
skin/adminhtml/default/default/ricento/css/ricento.css CHANGED
@@ -57,9 +57,6 @@ input[type="radio"] {
57
  font-weight: bold;
58
  color: red;
59
  }
60
- #sales_options_price_change_type {
61
- width: auto;
62
- }
63
  #diglin_ricento_price_change {
64
  width: 30px;
65
  }
@@ -93,6 +90,13 @@ input[type="radio"] {
93
 
94
  /********** Category Mapping views **********/
95
 
 
 
 
 
 
 
 
96
  #ricardo_categories {}
97
  #ricardo_categories nav {
98
  width: 200px;
@@ -153,6 +157,20 @@ input[type="radio"] {
153
  font-weight: bold;
154
  }
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  /********** Add missing Magento core pictures **********/
157
 
158
  .magento_minimize { background:url('images/window_minimize.png') 0 0 no-repeat !important;}
@@ -164,7 +182,9 @@ input[type="radio"] {
164
  .ricento-products-listing-item-configure .form-list {
165
  }
166
  .ricento-products-listing-edit .form-list td.value,
167
- .ricento-products-listing-item-configure .form-list td.value {
 
 
168
  width: auto !important;
169
  }
170
 
@@ -420,6 +440,9 @@ table.allowed-combinations td {width: 50%; padding: 5px;}
420
  .ricento_dashboard .right {
421
  width: 66%;
422
  }
 
 
 
423
 
424
  .ricento_toolbar {
425
  margin-bottom: 20px;
@@ -537,6 +560,7 @@ table.allowed-combinations td {width: 50%; padding: 5px;}
537
  }
538
  .ricento_news_description img {width:30%}
539
 
 
540
  .ricardo-support div img{
541
  width: 31%;
542
  margin: 1%;
@@ -562,4 +586,35 @@ table.allowed-combinations td {width: 50%; padding: 5px;}
562
 
563
  .ricardo-diglin .ricardo-imprint, .ricardo-diglin .diglin-imprint {width: 200px; height: 150px;}
564
  .ricardo-diglin .ricardo-imprint {float: left; margin-right: 50px}
565
- .ricardo-diglin .diglin-imprint {margin-left: 200px}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  font-weight: bold;
58
  color: red;
59
  }
 
 
 
60
  #diglin_ricento_price_change {
61
  width: 30px;
62
  }
90
 
91
  /********** Category Mapping views **********/
92
 
93
+ #ricento_popup_content .error-msg {
94
+ width: 100%;
95
+ text-indent: 40px;
96
+ line-height: 36px;
97
+ margin-bottom: 10px;
98
+ }
99
+
100
  #ricardo_categories {}
101
  #ricardo_categories nav {
102
  width: 200px;
157
  font-weight: bold;
158
  }
159
 
160
+ .category-suggestion input {
161
+ line-height: 20px;
162
+ width: 300px;
163
+ margin-bottom:20px;
164
+ padding: 0 4px;
165
+ }
166
+
167
+ #ricardo_categories .suggested a {
168
+ color: #FFA500;
169
+ }
170
+ #ricardo_categories .selected a,
171
+ #ricardo_categories .suggested a:hover {
172
+ color: #000;
173
+ }
174
  /********** Add missing Magento core pictures **********/
175
 
176
  .magento_minimize { background:url('images/window_minimize.png') 0 0 no-repeat !important;}
182
  .ricento-products-listing-item-configure .form-list {
183
  }
184
  .ricento-products-listing-edit .form-list td.value,
185
+ .ricento-products-listing-item-configure .form-list td.value,
186
+ .ricento-products-listing-edit .form-list .product-listing-select,
187
+ .ricento-products-listing-item-configure .product-listing-select {
188
  width: auto !important;
189
  }
190
 
440
  .ricento_dashboard .right {
441
  width: 66%;
442
  }
443
+ .ricento_dashboard .right .banner {
444
+ width: 100%;
445
+ }
446
 
447
  .ricento_toolbar {
448
  margin-bottom: 20px;
560
  }
561
  .ricento_news_description img {width:30%}
562
 
563
+ /*********** Product Page ***********/
564
  .ricardo-support div img{
565
  width: 31%;
566
  margin: 1%;
586
 
587
  .ricardo-diglin .ricardo-imprint, .ricardo-diglin .diglin-imprint {width: 200px; height: 150px;}
588
  .ricardo-diglin .ricardo-imprint {float: left; margin-right: 50px}
589
+ .ricardo-diglin .diglin-imprint {margin-left: 200px}
590
+
591
+
592
+ /*********** Confirmation Popup ***********/
593
+
594
+ #ricento_popup_confirmation_content table {
595
+ width: 100%;
596
+ padding: 5px;
597
+ }
598
+
599
+ #ricento_popup_confirmation_content table thead tr {
600
+ background-color: #f1f1f1;
601
+ }
602
+ #ricento_popup_confirmation_content table th,
603
+ #ricento_popup_confirmation_content table td {
604
+ padding: 5px;
605
+ }
606
+
607
+ #ricento_popup_confirmation_content table tfoot td {
608
+ font-weight: bold;
609
+ }
610
+
611
+ #ricento_popup_confirmation_content .terms {
612
+ padding: 10px;
613
+ margin-bottom: 15px;
614
+ }
615
+ #ricento_popup_confirmation_content button {
616
+ float: right;
617
+ margin-right: 20px;
618
+ }
619
+
620
+
skin/adminhtml/default/default/ricento/images/banner.png ADDED
Binary file
skin/adminhtml/default/default/ricento/images/github.png ADDED
Binary file