├── README.md
├── app
├── code
│ └── community
│ │ └── QVC
│ │ └── ConfigurableAutoPricing
│ │ ├── Block
│ │ └── System
│ │ │ └── Config
│ │ │ └── Form
│ │ │ └── Field
│ │ │ └── Array.php
│ │ ├── Helper
│ │ └── Data.php
│ │ ├── Model
│ │ ├── Observer.php
│ │ └── PriceChanges.php
│ │ ├── etc
│ │ ├── config.xml
│ │ └── system.xml
│ │ └── sql
│ │ └── qvc_configurableautopricing_setup
│ │ └── install-0.1.0.php
└── etc
│ └── modules
│ └── QVC_ConfigurableAutoPricing.xml
├── composer.json
└── modman
/README.md:
--------------------------------------------------------------------------------
1 | ## Overview
2 |
3 | This extension is for who may have a configurable product with different prices for the children products and who either update the catalog manually or automatically through the api.
4 |
5 | It let you to set the different prices on the simple products and have the related configurable updated with the price differences.
6 |
7 | There's another module that let you just use the simple products prices in the catalog: [Magento Configurable Simple](https://github.com/organicinternet/magento-configurable-simple).
8 | It does the job but it also extends a lot of classes that in an already customized installation may have been extended, so the integration may take a lot of time and has a high risk of breaking things.
9 |
10 | The approach used here is to just update the price differences on the configurable product depending on the children products prices.
11 |
12 | The big deal is that everything is done through an observer in the before_save event, so you won't have to integrate with your installation (unless you have changed something of the Magento core like the prices, but that's unlikely)
13 |
14 | ## Requirements
15 |
16 | Magento EE 1.12-1.13, CE 1.9
17 |
18 | The extension was tested on these Magento versions, with the help of the GitHub community.
19 | If you're gonna try it on other versions, please let us know how it behaves! Hopefully we'll updated the compatible versions list :)
20 |
21 | ## Installation
22 | ### Modman
23 |
24 | Go in your project root folder and run
25 |
26 | $ git submodule add git://github.com/QVCItalia/magento-configurable-auto-pricing.git .modman/QVC_ConfigurableAutoPricing
27 | $ modman deploy QVC_ConfigurableAutoPricing
28 |
29 | Clean the cache
30 |
31 | ### Manually
32 |
33 | * Download latest version [here](https://github.com/QVCItalia/magento-configurable-auto-pricing/archive/master.zip)
34 | * Unzip in Magento root folder
35 | * Clean the cache
36 |
37 | ## Usage
38 |
39 | * Set the individual prices on the children products.
40 | * Set the "Is split value" flag of the parent product, in tab "Prices".
41 | * Make sure to save the parent product after you have modified the children products prices.
42 | * That's all!!
43 |
44 | You can set special price or normal price on the children products and if the special price is actually valid, then it will be used to calculate the differences.
45 |
46 | On the parent product will be set the **lowest** price found in the children. Either price, special_price, special_from_date and special_to_date will be set.
47 | From the configuration panel you can either disable this feature or specify other attributes to copy from the child with the lowest price to the parent.
48 |
49 | **BE CAREFUL**, if you have some children products with the special_price and some without then the parent will have the settings of the child with the lowest price, that maybe incoherent with the other children. If you won't have this situation, you won't have any trouble.
50 |
51 | Eg:
52 |
53 | If you have the following product
54 |
55 | | Product Type | Sku | Attribute Size | Price |
56 | | ------------ | --- | --------- | ----- |
57 | | Configurable | 1000 | | 21 |
58 | | Simple | 1000-A | Small | 21 |
59 | | Simple | 1000-B | Big | 31 |
60 |
61 | when you save the configurable product, it will update the pricing value of **Big** attribute to **10** (just for this product, obviously).
62 |
63 | ## Configuration
64 |
65 | In your backend, if you go under System > Configuration > Catalog > Configurable Auto Pricing you can edit a few settings:
66 |
67 | | Label | Type | Default | Description |
68 | | ----- | --- | --------- | ----- |
69 | | Enable | Yes/No | Yes | Activate the module |
70 | | Parent price from children | Yes/No | Yes | Copy the attributes price, special_price, special_from_date, special_to_date from the child having the minimum price to the parent, along with the additional attributes you can specify here below. |
71 | | Attributes to copy to parent product | Multivalue | - | These attributes will be copied from the child with the lowest price to the parent product, along with price, special_price, special_from_date, special_to_date. This has no effect if flag "parent price from children" is false |
72 |
73 | ## Develop
74 |
75 | When the price updates are applied on the parent product (this is done in before_save event) another event is triggered: *configurableautopricing_after_apply_price*.
76 | You can attach your observer to that event to edit everything else your customization needs.
77 |
78 | ## Limitation
79 |
80 | To have the price deltas calculation done correctly the price changes **MUST** be based just on 1 attribute.
81 |
82 |
83 |
84 | Example
85 |
86 | if I have an item with attributes size and colors then the price can change for every different size or for every different color but not for both.
87 |
88 | A product **non-suitable** to this extension:
89 |
90 | | Product Type | Sku | Attribute Size | Attribute Color | Price |
91 | | ------------ | --- | --------- | ----- | ----- |
92 | | Configurable | 1000 | | | 21 |
93 | | Simple | 1000-A | Small | Silver | 21 |
94 | | Simple | 1000-A | Small | Gold | 23 |
95 | | Simple | 1000-B | Big | Silver | 31 |
96 | | Simple | 1000-B | Big | Gold | 33 |
97 |
98 | *The changes are based both on Size attribute and Color attribute*
99 |
100 |
101 |
102 | Example of a product **suitable** to this extension:
103 |
104 | | Product Type | Sku | Attribute Size | Attribute Color | Price |
105 | | ------------ | --- | --------- | ----- | ----- |
106 | | Configurable | 1000 | | | 21 |
107 | | Simple | 1000-A | Small | Silver | 21 |
108 | | Simple | 1000-A | Small | Gold | 21 |
109 | | Simple | 1000-B | Big | Silver | 31 |
110 | | Simple | 1000-B | Big | Gold | 31 |
111 |
112 | *The changes are based just on Size attribute*
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/Block/System/Config/Form/Field/Array.php:
--------------------------------------------------------------------------------
1 | addColumn('field', array(
8 | 'label' => Mage::helper('adminhtml')->__('Field'),
9 | 'size' => 30,
10 | ));
11 | $this->_addAfter = false;
12 | $this->_addButtonLabel = Mage::helper('adminhtml')->__('Add new field');
13 |
14 | parent::__construct();
15 | $this->setTemplate('system/config/form/field/array.phtml');
16 | }
17 |
18 | protected function _renderCellTemplate($columnName)
19 | {
20 | if (empty($this->_columns[$columnName])) {
21 | throw new Exception('Wrong column name specified.');
22 | }
23 | $column = $this->_columns[$columnName];
24 | $inputName = $this->getElement()->getName() . '[#{_id}][' . $columnName . ']';
25 |
26 | $rendered = '';
27 |
28 |
29 | return $rendered;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/Helper/Data.php:
--------------------------------------------------------------------------------
1 | isConfigurable()) {
33 | return false;
34 | }
35 |
36 | $children = $this->getProductChildren($product);
37 | if (empty($children)) {
38 | return false;
39 | }
40 |
41 | $priceChanges = $this->getPriceDeltas($product);
42 |
43 | $productType = $product->getTypeInstance(true);
44 | $productType->setProduct($product);
45 |
46 | $attributesData = $product->getConfigurableAttributesData();
47 | if (!is_array($attributesData)) {
48 | $attributesData = $productType->getConfigurableAttributesAsArray();
49 | }
50 |
51 | /**
52 | * Apply the deltas to the configurable attributes array
53 | */
54 | if ($priceChanges->hasChanges()) {
55 | foreach ($attributesData as &$attribute) {
56 | $attributeCode = $attribute['attribute_code'];
57 |
58 | foreach ($attribute['values'] as &$value) {
59 | $valueIndex = $value['value_index'];
60 | $priceChange = $priceChanges->getPriceDelta($attributeCode, $valueIndex);
61 | if ($priceChange !== null) {
62 | $value['pricing_value'] = $priceChange;
63 | }
64 | }
65 | }
66 | $product->setConfigurableAttributesData($attributesData);
67 | }
68 |
69 | /**
70 | * If the parent price should be taken from the children, set the price and eventually the special from
71 | * and the special to date to the parent and trigger the event
72 | */
73 | if (Mage::getStoreConfigFlag(self::CONFIG_XPATH_PARENT_PRICE)) {
74 | $priceChanges->applyPrice($product);
75 | }
76 |
77 | return true;
78 | }
79 |
80 | /**
81 | * Get a price deltas array
82 | *
83 | * @param Mage_Catalog_Model_Product $product
84 | * @return QVC_ConfigurableAutoPricing_Model_PriceChanges
85 | */
86 | public function getPriceDeltas(Mage_Catalog_Model_Product $product)
87 | {
88 | if (isset($this->_deltas[$product->getId()])) {
89 | return $this->_deltas[$product->getId()];
90 | }
91 |
92 | if (!$product->isConfigurable()) {
93 | return null;
94 | }
95 |
96 | /**
97 | * Get product attributes
98 | */
99 | $attributesArray = $this->getConfigurableAttributesArray($product);
100 |
101 | /**
102 | * Parse children to get absolute prices
103 | */
104 | $prices = array();
105 | $minPrice = null;
106 | $minChild = null;
107 |
108 | $children = $this->getProductChildren($product);
109 |
110 | if (empty($children)) {
111 | return null;
112 | }
113 |
114 | foreach ($children as $child) {
115 | $currentPrice = $this->getActualPrice($child);
116 |
117 | foreach ($attributesArray as $attributeCode) {
118 | $prices[$attributeCode][$child->getData($attributeCode)][] = $currentPrice;
119 | }
120 |
121 | /**
122 | * If the price for the deltas should be the minimum price, put it into vars
123 | */
124 | if ($currentPrice<$minPrice || $minPrice===null) {
125 | $minPrice = $currentPrice;
126 | $minChild = $child;
127 | }
128 | }
129 |
130 | /**
131 | * If the price shouldn't be taken from the children, take it from the parent
132 | */
133 | if (!Mage::getStoreConfigFlag(self::CONFIG_XPATH_PARENT_PRICE)) {
134 | $minPrice = $this->getActualPrice($product);
135 | $minChild = $product;
136 | }
137 |
138 | /**
139 | * Parse absolute prices to get price deltas
140 | * @var QVC_ConfigurableAutoPricing_Model_PriceChanges $priceChanges
141 | */
142 | $priceChanges = Mage::getModel('qvc_configurableautopricing/priceChanges');
143 | foreach ($prices as $attributeCode => $attribute) {
144 | foreach ($attribute as $attributeValue => $attributePrices) {
145 | $attributePrices = array_unique($attributePrices);
146 | if (count($attributePrices)==1) {
147 | $delta = $attributePrices[0]-$minPrice;
148 | }
149 | else {
150 | $delta = 0;
151 | }
152 | $priceChanges->setPriceDelta($attributeCode, $attributeValue, $delta);
153 | }
154 | }
155 |
156 | $priceChanges->setPriceFromChild($minChild);
157 |
158 | $this->_deltas[$product->getId()] = $priceChanges;
159 |
160 | return $priceChanges;
161 | }
162 |
163 | /**
164 | * Get the actual price for the product
165 | *
166 | * @param Mage_Catalog_Model_Product $product
167 | * @return float
168 | */
169 | public function getActualPrice(Mage_Catalog_Model_Product $product)
170 | {
171 | if ($this->isActualPriceSpecial($product)) {
172 | return $product->getSpecialPrice();
173 | }
174 |
175 | return $product->getPrice();
176 | }
177 |
178 | /**
179 | * @param Mage_Catalog_Model_Product $product
180 | * @return bool
181 | */
182 | public function isActualPriceSpecial(Mage_Catalog_Model_Product $product)
183 | {
184 | return $product->getSpecialPrice()
185 | && Mage::app()->getLocale()->isStoreDateInInterval(Mage::app()->getStore(), $product->getSpecialFromDate(), $product->getSpecialToDate());
186 | }
187 |
188 | /**
189 | * Get the collection of children products
190 | *
191 | * @param Mage_Catalog_Model_Product $product
192 | * @return Mage_Catalog_Model_Resource_Product_Collection
193 | */
194 | public function getProductChildren(Mage_Catalog_Model_Product $product)
195 | {
196 | if (isset($this->_children[$product->getId()])) {
197 | return $this->_children[$product->getId()];
198 | }
199 |
200 | $attributesToSelect = array_merge($this->getAttributesArray($product), array(
201 | 'price',
202 | 'special_price',
203 | 'special_from_date',
204 | 'special_to_date'));
205 |
206 | $configurableProductsData = $product->getConfigurableProductsData();
207 | if (!is_array($configurableProductsData)) {
208 | $childrenIds = Mage::getModel('catalog/product_type_configurable')->getChildrenIds($product->getId());
209 | }
210 | else {
211 | $childrenIds = array(0 => array());
212 | foreach ($configurableProductsData as $key => $value) {
213 | $childrenIds[0][$key] = $key;
214 | }
215 | }
216 |
217 |
218 | if (empty($childrenIds) || empty($childrenIds[0])) {
219 | $children = null;
220 | }
221 | else {
222 | $children = Mage::getModel('catalog/product')->getCollection()
223 | ->addIdFilter($childrenIds)
224 | ->addAttributeToSelect($attributesToSelect);
225 | }
226 |
227 | return $this->_children[$product->getId()] = $children;
228 | }
229 |
230 | /**
231 | * @param Mage_Catalog_Model_Product $product
232 | * @return array
233 | */
234 | public function getAttributesArray(Mage_Catalog_Model_Product $product)
235 | {
236 | $attributes = $product->getTypeInstance()->getConfigurableAttributes($product);
237 | $attributesArray = array();
238 | foreach ($attributes as $attribute) {
239 | $attributeObject = Mage::getModel('eav/entity_attribute')->load($attribute->getAttributeId());
240 | $attributesArray[] = $attributeObject->getAttributeCode();
241 | }
242 |
243 | // add attributes set in config
244 | $additionalFields = QVC_ConfigurableAutoPricing_Model_PriceChanges::getAdditionalFields();
245 | $attributesArray = array_merge($attributesArray, $additionalFields);
246 |
247 | return $attributesArray;
248 | }
249 |
250 | /**
251 | * @param Mage_Catalog_Model_Product $product
252 | * @return array
253 | */
254 | public function getConfigurableAttributesArray(Mage_Catalog_Model_Product $product)
255 | {
256 | $attributes = $product->getTypeInstance()->getConfigurableAttributes($product);
257 | $attributesArray = array();
258 | foreach ($attributes as $attribute) {
259 | $attributeObject = Mage::getModel('eav/entity_attribute')->load($attribute->getAttributeId());
260 | $attributesArray[] = $attributeObject->getAttributeCode();
261 | }
262 |
263 | return $attributesArray;
264 | }
265 | }
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/Model/Observer.php:
--------------------------------------------------------------------------------
1 | getProduct();
27 |
28 | if ($product->getIsSplitValue()) {
29 | $this->_wasObjectNew = $product->isObjectNew();
30 | if (!$this->_wasObjectNew) {
31 | $this->_updatePriceDeltas($product);
32 | }
33 | }
34 | }
35 | }
36 |
37 | /**
38 | * After commit, if product has price deltas, re-save product.
39 | * The price deltas (already calculated in singleton helper) will be applied in before save.
40 | *
41 | * @param $observer
42 | */
43 | public function updatePriceDeltasAfterSave($observer)
44 | {
45 | if (Mage::getStoreConfigFlag(self::CONFIG_XPATH_ENABLE)) {
46 | /** @var Mage_Catalog_Model_Product $product */
47 | $product = $observer->getProduct();
48 |
49 | if ($this->_wasObjectNew && $product->getIsSplitValue()) {
50 | $this->_wasObjectNew = false;
51 |
52 | $product->setDataChanges(true);
53 | $product->getResource()
54 | ->save($product);
55 | }
56 | }
57 | }
58 |
59 | /**
60 | * Update the product configurable attributes pricing with the price deltas of his children, if any
61 | * Return true if price modifications were applied
62 | *
63 | * @param Mage_Catalog_Model_Product $product
64 | * @return bool
65 | */
66 | protected function _updatePriceDeltas(Mage_Catalog_Model_Product $product)
67 | {
68 | /** @var QVC_ConfigurableAutoPricing_Helper_Data $helper */
69 | $helper = Mage::helper('qvc_configurableautopricing');
70 |
71 | return $helper->setConfigurableAttributesPricing($product);
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/Model/PriceChanges.php:
--------------------------------------------------------------------------------
1 | _isPriceSet = true;
65 | $this->_price = $price;
66 | $this->_specialPrice = $specialPrice;
67 | $this->_specialFrom = $specialFrom;
68 | $this->_specialTo = $specialTo;
69 |
70 | return $this;
71 | }
72 |
73 | /**
74 | * @param Mage_Catalog_Model_Product $child
75 | * @return $this
76 | * @throws InvalidArgumentException
77 | */
78 | public function setPriceFromChild(Mage_Catalog_Model_Product $child)
79 | {
80 | if ($child === null) {
81 | throw new InvalidArgumentException("Product passed is a non-object");
82 | }
83 |
84 | $price = $child->getPrice();
85 | $specialPrice = $child->getSpecialPrice();
86 | $specialFrom = $child->getSpecialFromDate();
87 | $specialTo = $child->getSpecialToDate();
88 |
89 | $this->setPrice($price, $specialPrice, $specialFrom, $specialTo);
90 | $this->_priceChild = $child;
91 |
92 | return $this;
93 | }
94 |
95 | /**
96 | * @param Mage_Catalog_Model_Product $product
97 | * @throws InvalidArgumentException
98 | */
99 | public function applyPrice(Mage_Catalog_Model_Product &$product)
100 | {
101 | if ($this->_priceChild === null) {
102 | throw new InvalidArgumentException("Price child was not set");
103 | }
104 |
105 | if ($this->_isPriceSet) {
106 | $product->setPrice($this->_price);
107 | $product->setSpecialPrice($this->_specialPrice);
108 | $product->setSpecialFromDate($this->_specialFrom);
109 | $product->setSpecialToDate($this->_specialTo);
110 |
111 | // set additional fields set in config
112 | $additionalFields = self::getAdditionalFields();
113 | foreach ($additionalFields as $fieldName) {
114 | $product->setData($fieldName, $this->_priceChild->getData($fieldName));
115 | }
116 |
117 | /**
118 | * Trigger event
119 | */
120 | Mage::dispatchEvent('configurableautopricing_after_apply_price', array(
121 | 'parent' => $product,
122 | 'child' => $this->_priceChild));
123 | }
124 | }
125 |
126 | /**
127 | * @param $attributeCode
128 | * @param $attributeValue
129 | * @param $delta
130 | * @return $this
131 | */
132 | public function setPriceDelta($attributeCode, $attributeValue, $delta)
133 | {
134 | $this->_deltas[$attributeCode][$attributeValue] = $delta;
135 |
136 | return $this;
137 | }
138 |
139 | /**
140 | * @param $attributeCode
141 | * @param $attributeValue
142 | * @return null
143 | */
144 | public function getPriceDelta($attributeCode, $attributeValue)
145 | {
146 | if (isset($this->_deltas[$attributeCode]) && isset($this->_deltas[$attributeCode][$attributeValue])) {
147 | return $this->_deltas[$attributeCode][$attributeValue];
148 | }
149 |
150 | return null;
151 | }
152 |
153 | /**
154 | * @return bool
155 | */
156 | public function hasChanges()
157 | {
158 | return !empty($this->_deltas);
159 | }
160 |
161 | /**
162 | * @return array
163 | */
164 | public function getPriceDeltasArray()
165 | {
166 | return $this->_deltas;
167 | }
168 |
169 | /**
170 | * @return array
171 | */
172 | public static function getAdditionalFields()
173 | {
174 | $fieldsArray = array();
175 |
176 | $additionalFields = unserialize(Mage::getStoreConfig(self::CONFIG_XPATH_FIELDS));
177 | if (is_array($additionalFields)) {
178 | foreach ($additionalFields as $field) {
179 | $fieldsArray[] = $field['field'];
180 | }
181 | }
182 |
183 | return $fieldsArray;
184 | }
185 | }
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/etc/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 0.1.0
6 |
7 |
8 |
9 |
10 |
11 | QVC_ConfigurableAutoPricing_Helper
12 |
13 |
14 |
15 |
16 | QVC_ConfigurableAutoPricing_Model
17 |
18 |
19 |
20 |
21 | QVC_ConfigurableAutoPricing_Block
22 |
23 |
24 |
25 |
26 |
27 |
28 | singleton
29 | qvc_configurableautopricing/observer
30 | updatePriceDeltasBeforeSave
31 |
32 |
33 |
34 |
35 |
36 |
37 | singleton
38 | qvc_configurableautopricing/observer
39 | updatePriceDeltasAfterSave
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | QVC_ConfigurableAutoPricing
48 | Mage_Eav_Model_Entity_Setup
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | 1
57 | 1
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | Allow Everything
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | Configurable Auto Pricing
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/etc/system.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | catalog
7 | 1000
8 | text
9 | 1
10 | 1
11 | 1
12 |
13 |
14 |
15 | text
16 | 100
17 | 1
18 | 1
19 | 1
20 |
21 |
22 |
23 | select
24 | 10
25 | 1
26 | 1
27 | 1
28 | adminhtml/system_config_source_yesno
29 |
30 |
31 |
32 | select
33 | Copy the attributes price, special_price, special_from_date, special_to_date from the child having the minimum price to the parent, along with the additional attributes you can specify here below.
34 | 30
35 | 1
36 | 1
37 | 1
38 | adminhtml/system_config_source_yesno
39 |
40 |
41 |
42 | These attributes will be copied from the child with the lowest price to the parent product, along with price, special_price, special_from_date, special_to_date. This has no effect if flag "parent price from children" is false
43 | qvc_configurableautopricing/system_config_form_field_array
44 | 20
45 | 1
46 | 1
47 | 1
48 | adminhtml/system_config_backend_serialized_array
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/app/code/community/QVC/ConfigurableAutoPricing/sql/qvc_configurableautopricing_setup/install-0.1.0.php:
--------------------------------------------------------------------------------
1 | startSetup();
9 |
10 | /**
11 | * Add 'qvc_disable_reviews' attribute to the 'eav/attribute' table
12 | */
13 | $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'is_split_value', array(
14 | 'group' => 'Prices',
15 | 'type' => 'int',
16 | 'backend' => '',
17 | 'frontend' => '',
18 | 'label' => 'Is split value',
19 | 'input' => 'select',
20 | 'class' => '',
21 | 'source' => 'eav/entity_attribute_source_boolean',
22 | 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
23 | 'visible' => true,
24 | 'required' => false,
25 | 'user_defined' => false,
26 | 'default' => '0',
27 | 'searchable' => false,
28 | 'filterable' => false,
29 | 'comparable' => false,
30 | 'visible_on_front' => false,
31 | 'unique' => false,
32 | 'apply_to' => '',
33 | 'is_configurable' => false,
34 | ));
35 |
36 | $installer->endSetup();
--------------------------------------------------------------------------------
/app/etc/modules/QVC_ConfigurableAutoPricing.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | true
6 | community
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dvmage/magento-configurable-auto-pricing",
3 | "type": "magento-module",
4 | "license":"OSL-3.0",
5 | "description":"",
6 | "authors":[
7 | {
8 | "name":"Desislav Yosifov",
9 | "email":"divels.studio@gmail.com"
10 | }
11 | ],
12 |
13 | "repositories": [
14 | {
15 | "type": "vcs",
16 | "url": "https://github.com/magento-hackathon/magento-composer-installer"
17 | }
18 | ],
19 |
20 | "require": {
21 | "magento-hackathon/magento-composer-installer": "*"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/modman:
--------------------------------------------------------------------------------
1 | app/etc/modules/QVC_ConfigurableAutoPricing.xml app/etc/modules/QVC_ConfigurableAutoPricing.xml
2 | app/code/community/QVC/ConfigurableAutoPricing/ app/code/community/QVC/ConfigurableAutoPricing/
3 |
--------------------------------------------------------------------------------