/** * @param Varien_Data_Form_Element_Fieldset $parentFieldset * @param Adyen_Subscription_Model_Product_Subscription $subscription * * @return Varien_Data_Form_Element_Fieldset */ protected function _renderSubscriptionFieldset(Varien_Data_Form_Element_Fieldset $parentFieldset, Adyen_Subscription_Model_Product_Subscription $subscription = null) { $helper = Mage::helper('adyen_subscription'); $subscriptionCount = 0; // retrieve $linkedSubscriptionText = ""; if ($subscription) { $productSubscriptionCollection = Mage::getModel('adyen_subscription/subscription_item')->getCollection(); $productSubscriptionCollection->addFieldToFilter('product_subscription_id', $subscription->getId()); $resource = $productSubscriptionCollection->getResource(); $productSubscriptionCollection->getSelect()->joinLeft(array('subscription' => $resource->getTable('adyen_subscription/subscription')), 'main_table.subscription_id = subscription.entity_id'); $productSubscriptionCollection->getSelect()->where('main_table.status = ?', Adyen_Subscription_Model_Subscription::STATUS_ACTIVE); $productSubscriptionCollection->getSelect()->group('subscription_id'); $subscriptionCount = $productSubscriptionCollection->count(); if ($subscriptionCount > 0) { $linkedSubscriptionText = "<br />" . $helper->__(" Currently used in %s active subscription(s)", $subscriptionCount); // add extra classname to indicate there are linked subscription to this productSubscription on removal } else { $linkedSubscriptionText = "<br />" . $helper->__(" Currently not used in any active subscription"); } } $elementId = $subscription ? 'product_subscription[' . $subscription->getId() . ']' : 'product_subscription[template]'; $subscriptionFieldset = $parentFieldset->addFieldset($elementId, array('legend' => $subscription ? $helper->__('Subscription: %s (ID: %s)', '<em>' . $subscription->getLabel() . '</em>', $subscription->getId()) : $helper->__('New Adyen Subscription') . $linkedSubscriptionText, 'class' => 'subscription-fieldset' . (!$subscription ? ' product-fieldset-template' : ''), 'name' => $elementId . '[fieldset]'))->setRenderer($this->getLayout()->createBlock('adyen_subscription/adminhtml_catalog_product_tab_subscription_fieldset')); $subscriptionFieldset->addType('price', Mage::getConfig()->getBlockClassName('adyen_subscription/adminhtml_catalog_product_tab_subscription_price')); $data = array('label' => 'Delete Subscription', 'class' => 'delete product-subscription-delete'); if ($subscriptionCount > 0) { $data['onclick'] = 'var message = \'' . $helper->__('There are subscriptions using this method are you sure you want to delete it? it will not change the current subscriptions.') . '\'; if( confirm(message) ) { $(this).up(\'.subscription-fieldset-container\').remove(); }'; } else { $data['onclick'] = '$(this).up(\'.subscription-fieldset-container\').remove();'; } $button = $this->getLayout()->createBlock('adminhtml/widget_button')->setData($data); $button->setName('delete_subscription'); $subscriptionFieldset->setHeaderBar($button->toHtml()); $inStore = Mage::app()->getRequest()->getParam('store'); $subscriptionFieldset->addField($elementId . '[label]', 'text', array('name' => $elementId . '[label]', 'label' => $helper->__('Label'), 'disabled' => $inStore && ($subscription ? !$subscription->getStoreLabel($inStore) : false), 'required' => true, 'after_element_html' => $inStore ? '</td><td class="use-default"> <input id="' . $elementId . '[use_default]" name="' . $elementId . '[use_default]" type="checkbox" value="1" class="checkbox config-inherit" ' . ($subscription ? $subscription->getStoreLabel($inStore) : false ? '' : 'checked="checked"') . ' onclick="toggleValueElements(this, Element.previous(this.parentNode))" /> <label for="' . $elementId . '[use_default]" class="inherit">' . Mage::helper('adyen_subscription')->__('Use Default') . '</label> </td><td class="scope-label"> [' . $helper->__('STORE VIEW') . '] ' : '</td><td class="scope-label"> [' . $helper->__('STORE VIEW') . ']'))->setValue($subscription ? $subscription->getLabel($inStore) : ''); $subscriptionFieldset->addField($elementId . '[website_id]', 'select', array('name' => $elementId . '[website_id]', 'label' => $helper->__('Website'), 'values' => Mage::getSingleton('adyen_subscription/system_config_source_subscription_websites')->toOptionArray()))->setValue($subscription ? $subscription->getWebsiteId() : ''); $subscriptionFieldset->addField($elementId . '[customer_group_id]', 'select', array('name' => $elementId . '[customer_group_id]', 'label' => $helper->__('Customer Group'), 'values' => Mage::getSingleton('adyen_subscription/system_config_source_subscription_groups')->toOptionArray()))->setValue($subscription ? $subscription->getCustomerGroupId() : ''); $subscriptionFieldset->addField($elementId . '[term]', 'text', array('name' => $elementId . '[term]', 'required' => true, 'class' => 'validate-digits validate-digits-range digits-range-1-3153600000', 'label' => $helper->__('Billing Period')))->setValue($subscription ? $subscription->getTerm() : ''); $subscriptionFieldset->addField($elementId . '[term_type]', 'select', array('name' => $elementId . '[term_type]', 'label' => $helper->__('Billing Period Unit'), 'required' => true, 'values' => Mage::getSingleton('adyen_subscription/system_config_source_term')->toOptionArray(true), 'note' => $this->__('Subscription will be created every [Billing Period] [Billing Period Unit], e.g. every 3 months.')))->setValue($subscription ? $subscription->getTermType() : ''); // Min and max billing cycle currently not in use // $subscriptionFieldset->addField($elementId . '[min_billing_cycles]', 'text', array( // 'name' => $elementId . '[min_billing_cycles]', // 'required' => true, // 'class' => 'validate-digits validate-digits-range digits-range-1-3153600000', // 'label' => $helper->__('Min. Billing Cycles'), // ))->setValue($subscription ? $subscription->getMinBillingCycles() : '1'); // // $subscriptionFieldset->addField($elementId . '[max_billing_cycles]', 'text', array( // 'name' => $elementId . '[max_billing_cycles]', // 'label' => $helper->__('Max. Billing Cycles'), // ))->setValue($subscription ? $subscription->getMaxBillingCycles() : ''); $subscriptionFieldset->addField($elementId . '[qty]', 'text', array('name' => $elementId . '[qty]', 'required' => true, 'class' => 'validate-number', 'label' => $helper->__('Qty in Subscription')))->setValue($subscription ? $subscription->getQty() * 1 : '1'); /** @var Adyen_Subscription_Block_Adminhtml_Catalog_Product_Tab_Subscription_Price $priceField */ $priceField = $subscriptionFieldset->addField($elementId . '[price]', 'price', array('name' => $elementId . '[price]', 'label' => $helper->__('Price'), 'class' => 'price-tax-calc', 'identifier' => $subscription ? $subscription->getId() : 'template', 'subscription_count' => $subscription ? $this->_getSubscriptionUsedCount($subscription) : 0)); $priceField->setValue($subscription ? $subscription->getPrice() * 1 : ''); $priceField->setSubscription($subscription); $subscriptionFieldset->addField($elementId . '[show_on_frontend]', 'select', array('name' => $elementId . '[show_on_frontend]', 'label' => $helper->__('Show on Frontend'), 'options' => array(1 => $helper->__('Yes'), 0 => $helper->__('No'))))->setValue($subscription ? $subscription->getShowOnFrontend() : 0); if ($subscriptionCount > 0) { $subscriptionFieldset->addField($elementId . '[warning]', 'note', array('text' => '<p style="display:none;" class=\'adyen_notice notice\'>' . $helper->__('Watch out! this product subscription is used in current subscriptions. Change this will not change the current subscriptions') . '</p>')); } return $subscriptionFieldset; }