├── 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 | --------------------------------------------------------------------------------