<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class supports ADSL Suppliers
 *
 * @package    ADSL
 * @category   Models
 * @author     Deon George
 * @copyright  (c) 2009-2013 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
class Model_ADSL_Supplier extends ORM_OSB {
	protected $_updated_column = FALSE;

	// Relationships
	protected $_has_many = array(
		'plan'=>array('model'=>'ADSL_Supplier_Plan','foreign_key'=>'supplier_id','far_key'=>'id'),
		'traffic'=>array('model'=>'Service_Plugin_Adsl_Traffic','foreign_key'=>'supplier_id','far_key'=>'id'),
	);

	protected $_form = array('id'=>'id','value'=>'name');

	/**
	 * Return a list of plans that we provide by this supplier
	 * @deprecated
	 */
	public function plans($active=TRUE) {
		$result = array();

		foreach ($this->find_plans($active)->find_all() as $po)
			foreach ($po->admin_plan()->find_all() as $apo)
				$result[$apo->id] = $apo;

		return $result;
	}

	/**
	 * Return the class that takes care of processing invoices
	 */
	public function billing() {
		$b = Kohana::classname('ADSL_Billing_'.$this->name);

		if (! class_exists($b))
			throw HTTP_Exception::factory(501,'Billing class doesnt exist for :name',array(':name'=>$this->name));

		return new $b;
	}

	/**
	 * Return a list of plans that this supplier makes available
	 */
	public function find_plans($active=TRUE) {
		return $active ? $this->plan->where_active() : $this->plan;
	}

	/**
	 * Return a list of services for this supplier
	 *
	 * @param boolean $active TRUE List only active Services|False List all services
	 */
	public function services($active=TRUE) {
		$result = array();

		foreach ($this->find_plans(FALSE)->find_all() as $aspo) {
			foreach ($aspo->plan->find_all() as $apo) {
				foreach ($apo->products(FALSE) as $po) {
					foreach ($po->service->list_active() as $so) {
						array_push($result,$so);
					}
				}
			}
		}

		return $result;
	}
}
?>