protected function _prepareCollection() { /* @var $collection Monogo_ApplicationMultiFb_Model_Resource_Applicationmultifb_Collection */ $collection = Mage::getModel('monogo_applicationmultifb/applicationmultifb')->getCollection(); $resource = Mage::getModel('core/resource'); $applicationTable = $resource->getTableName('monogo_application/application_entity'); $isCoordinator = null; $isOwner = null; if (Monogo_Application_Model_Config::hasRole(Monogo_Application_Model_Config::ROLE_RKS)) { $regions = array(); $agencies = array(); $collection_regions = Mage::getModel('monogo_rks/rks_user_to_set')->getCollection()->addFieldToFilter('user_id', Mage::getSingleton('admin/session')->getUser()->getId()); foreach ($collection_regions as $item) { $regions[] = $item->getSetId(); } $collection_agencies = Mage::getModel('monogo_agency/agency')->getCollection()->addFieldToFilter('region_id', array('in' => $regions)); foreach ($collection_agencies as $item) { $agencies[] = $item->getAgencyId(); } if (empty($agencies)) { $agencies = array(0); } $collection->getSelect()->joinLeft(array('user_under' => $resource->getTableName('monogo_agency/under')), 'user_under.agency_id IN (' . implode(',', $agencies) . ')', array())->joinLeft(array('user_above' => $resource->getTableName('monogo_agency/above')), 'user_above.agency_id IN (' . implode(',', $agencies) . ')', array())->where('user_under.user_id IS NOT NULL OR user_above.user_id IS NOT NULL'); } else { if (($isOwner = Monogo_Application_Model_Config::hasRole(Monogo_Application_Model_Config::ROLE_OWNER)) || Monogo_Application_Model_Config::hasRole(Monogo_Application_Model_Config::ROLE_TRADER) || ($isCoordinator = Monogo_Application_Model_Config::hasRole(Monogo_Application_Model_Config::ROLE_COORDINATOR))) { $userAgency = Mage::getModel('monogo_agency/agency')->getAgencyForUser(Monogo_Application_Model_Config::getLoggedUser()->getId()); $resource = Mage::getModel('core/resource'); if ($isOwner || $isCoordinator) { //all application with logged owner agency id $collection->getSelect()->where('main_table.entity_id IN (SELECT app.entity_id FROM ' . $resource->getTableName('monogo_applicationmultifb/applicationmultifb') . ' app WHERE app.user_id IN ( ' . ' SELECT above.user_id FROM ' . $resource->getTableName('monogo_agency/above') . ' above WHERE above.agency_id = ' . ($userAgency->getId() ? $userAgency->getId() : 0) . ' ' . ' UNION ' . ' SELECT under.user_id FROM ' . $resource->getTableName('monogo_agency/under') . ' under WHERE under.agency_id = ' . ($userAgency->getId() ? $userAgency->getId() : 0) . ' ' . '))'); } else { $collection->addFieldToFilter('main_table.user_id', Monogo_Application_Model_Config::getLoggedUser()->getId()); } } else { if (Monogo_Application_Model_Config::hasRole(Monogo_Application_Model_Config::ROLE_PARTNER)) { $partnerUser = Monogo_Application_Model_Config::getLoggedUser(); $partnerAvailableProducts = Mage::getModel('monogo_partner/partner_user_to_set')->getSetsForUser($partnerUser->getUserId()); $arrProducts = array(); foreach ($partnerAvailableProducts as $product) { $arrProducts[] = $product->getSetId(); } if (empty($arrProducts)) { $arrProducts = array(0); } $collection->getSelect()->join(array('application' => $resource->getTableName('monogo_application/application_entity')), 'application.entity_id = main_table.selected_id AND application.attribute_set_id IN (' . implode(',', $arrProducts) . ')', array()); } } } $this->customerSubquery = "CONCAT((SELECT ce.value FROM customer_entity_varchar ce JOIN eav_attribute ceav ON ceav.attribute_id = ce.attribute_id WHERE ce.entity_id = customer.entity_id AND ceav.attribute_code = 'firstname' LIMIT 1), ' ', (SELECT ce.value FROM customer_entity_varchar ce JOIN eav_attribute ceav ON ceav.attribute_id = ce.attribute_id WHERE ce.entity_id = customer.entity_id AND ceav.attribute_code = 'lastname' LIMIT 1))"; $collection->addExpressionFieldToSelect('cnt', '(SELECT COUNT(app.entity_id) FROM ' . $applicationTable . ' app WHERE app.application_multi_id = main_table.entity_id)', array('app.entity_id'))->getSelect()->join(array('user' => $resource->getTableName('admin/user')), "main_table.user_id = user.user_id ", array('userName' => "CONCAT(user.firstname, ' ', user.lastname)"))->join(array('customer' => $resource->getTableName('customer_entity')), "main_table.customer_id = customer.entity_id ", array('customerName' => $this->customerSubquery))->join(array('status_table' => $collection->getTable('monogo_application/application_status_history')), "main_table.entity_id = status_table.application_multi_id AND status_table.entity_id = (SELECT MAX(statuses3.entity_id) FROM " . $collection->getTable('monogo_application/application_status_history') . " statuses3 WHERE statuses3.application_multi_id = main_table.entity_id) AND status_table.created_at = (SELECT MAX(statuses2.created_at) FROM " . $collection->getTable('monogo_application/application_status_history') . " statuses2 WHERE statuses2.application_multi_id = main_table.entity_id)", array())->joinLeft(array('status_origin' => $collection->getTable('monogo_application/application_status')), "status_origin.entity_id = status_table.status_id ", array('status_origin.color_hex', 'status_origin.status_name')); $this->setCollection($collection); return parent::_prepareCollection(); }
/** * if $notes is true then return array with notes * @param type $notes * @return array */ public function getOptions($type = 'application', $notes = false) { //logged user role $roleId = Monogo_Application_Model_Config::getLoggedUserRoleID(); /* @var $collection Monogo_Application_Model_Resource_Application_Status_Collection */ $collection = $this->getCollection(); $collection->addFieldToFilter('type', $type); $arr = array(); $arr[''] = Mage::helper('monogo_application')->__('-- Select status --'); foreach ($collection as $row) { $arr[$row->getId()] = $row->getStatusName(); if ($notes) { $arr[$row->getId()] = $row->getNotes(); } } return $arr; }