DemacMedia/Magento-Multi-Location-Inventory

View on GitHub
app/code/community/Demac/MultiLocationInventory/Block/Adminhtml/Location/Edit/Tab/Location.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php
/**
 * Created by PhpStorm.
 * User: MichaelK
 * Date: 1/15/14
 * Time: 11:25 AM
 */

/**
 * Class Demac_MultiLocationInventory_Block_Adminhtml_Location_Edit_Tab_Location
 */
class Demac_MultiLocationInventory_Block_Adminhtml_Location_Edit_Tab_Location extends Mage_Adminhtml_Block_Widget_Form
{

    /**
     * Prepare form fields and data for Adminhtml Widget Form rendering.
     *
     * @return Demac_MultiLocationInventory_Block_Adminhtml_Location_Edit_Tab_Location
     */
    protected function _prepareForm()
    {
        $locationModel  = Mage::registry('multilocationinventory_data');
        $isEdit = (bool) $locationModel->getId();

        $form     = new Varien_Data_Form();
        $fieldset = $form->addFieldset('demac_multilocationinventory_form', array(
            'legend' => $this->__('Location Information')
        ));

        $this->_prepareFormHiddenFields($fieldset, $isEdit);
        $this->_prepareFormStatusField($fieldset);
        if(!Mage::app()->isSingleStoreMode()) {
            $this->_prepareFormStoreSelectorField($fieldset);
        } else {
            $this->_prepareFormStoreSelectorHiddenField($fieldset);
            $locationModel->setStoreId(Mage::app()->getStore(true)->getId());
        }
        $this->_prepareFormGeneralFields($fieldset);
        $this->_prepareFormAddressFields($fieldset);
        $this->_prepareFormLocationFields($fieldset);

        $form->setValues($locationModel->getData());
        $this->setForm($form);

        return parent::_prepareForm();
    }

    /**
     * Add hidden fields for id and create/update time to the form.
     *
     * @param $fieldset
     * @param $isEdit
     */
    protected function _prepareFormHiddenFields($fieldset, $isEdit)
    {
        if($isEdit) {
            $fieldset->addField('id', 'hidden', array(
                'name' => 'id',
            ));
        }

        $fieldset->addField('created_time', 'hidden', array(
            'name' => 'created_time',
        ));

        $fieldset->addField('update_time', 'hidden', array(
            'name' => 'update_time',
        ));
    }



    /**
     * Add hidden field to specify the current store to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormStoreSelectorHiddenField($fieldset)
    {
        $fieldset->addField('store_id', 'hidden', array(
            'name'  => 'stores[]',
            'value' => Mage::app()->getStore(true)->getId()
        ));
    }

    /**
     * Add field for store selection to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormStoreSelectorField($fieldset)
    {
        $field    = $fieldset->addField('store_id', 'multiselect', array(
            'name'     => 'stores[]',
            'label'    => $this->__('Inventory For'),
            'title'    => $this->__('Inventory For'),
            'required' => true,
            'values'   => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false),
        ));
        $renderer = $this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element');
        $field->setRenderer($renderer);
    }


/**
     * Add status field to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormStatusField($fieldset)
    {
        $fieldset->addField('status', 'select', array(
            'label'  => $this->__('Status'),
            'name'   => 'status',
            'values' => array(
                array(
                    'value' => 1,
                    'label' => $this->__('Enabled'),
                ),

                array(
                    'value' => 0,
                    'label' => $this->__('Disabled'),
                ),
            ),
        ));
    }

    /**
     * Add general fields to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormGeneralFields($fieldset)
    {
        $fieldset->addField('name', 'text', array(
            'label'    => $this->__('Name'),
            'class'    => 'required-entry',
            'required' => true,
            'name'     => 'name',
        ));

        $fieldset->addField('code', 'text', array(
            'label'    => $this->__('Code'),
            'class'    => 'required-entry',
            'required' => true,
            'name'     => 'code',
        ));

        $fieldset->addField('external_id', 'text', array(
            'label'    => $this->__('External ID'),
            'required' => false,
            'name'     => 'external_id',
        ));
    }

    /**
     * Add address fields to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormAddressFields($fieldset)
    {
        $fieldset->addField('address', 'text', array(
            'label'    => $this->__('Address'),
            'class'    => 'required-entry',
            'required' => true,
            'name'     => 'address',
        ));

        $fieldset->addField('zipcode', 'text', array(
            'label'    => $this->__('Postal Code'),
            'class'    => 'required-entry',
            'required' => true,
            'name'     => 'zipcode',
        ));

        $fieldset->addField('city', 'text', array(
            'label'    => $this->__('City'),
            'class'    => 'required-entry',
            'required' => true,
            'name'     => 'city',
        ));

        $values    = array();
        $countryId = Mage::registry('multilocationinventory_data')->getCountryId();
        if($countryId) {
            $values = Mage::helper('demac_multilocationinventory')->getRegions($countryId);
        }
        $fieldset->addField('region_id', 'select', array(
            'name'   => 'region_id',
            'label'  => 'State/Province',
            'values' => $values
        ));

        $countryList = Mage::getModel('directory/country')->getCollection()->toOptionArray();
        $country     = $fieldset->addField('country_id', 'select', array(
            'label'    => $this->__('Country'),
            'name'     => 'country_id',
            'title'    => 'country',
            'values'   => $countryList,
            'onchange' => 'getstate(this)',
        ));
        $country->setAfterElementHtml("<script type=\"text/javascript\">
            function getstate(selectElement){
                var reloadurl = '" . $this->getUrl('adminhtml/multiLocationInventory/region') . "country/' + selectElement.value;
                new Ajax.Request(reloadurl, {
                    method: 'get',
                    onLoading: function (stateform) {
                        $('region_id').update('Searching...');
                    },
                    onComplete: function(stateform) {
                        $('region_id').update(stateform.responseText);
                    }
                });
            }
        </script>");
    }

    /**
     * Add location fields to the form.
     *
     * @param $fieldset
     */
    protected function _prepareFormLocationFields($fieldset)
    {
        $fieldset->addField('lat', 'text', array(
            'label'    => $this->__('Latitude'),
            'required' => true,
            'name'     => 'lat',
        ));

        $fieldset->addField('long', 'text', array(
            'label'    => $this->__('Longitude'),
            'required' => true,
            'name'     => 'long',
        ));
    }
}