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

/**
 * This class provides Reseller Service functions
 *
 * @package    Service
 * @category   Controllers/Reseller
 * @author     Deon George
 * @copyright  (c) 2009-2013 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
class Controller_Reseller_Service extends Controller_Service {
	protected $secure_actions = array(
		'list'=>TRUE,
		'listbycheckout'=>TRUE,
		'listexpiring'=>TRUE,
		'listinvoicesoon'=>TRUE,
	);

	/**
	 * Show a list of services
	 */
	public function action_list() {
		Block::factory()
			->title('Customer Services')
			->title_icon('icon-th-list')
			->body(Table::factory()
				->jssort('services')
				->data(ORM::factory('Service')->where_authorised($this->ao)->find_all())
				->columns(array(
					'id'=>'ID',
					'service_name()'=>'Service',
					'recur_schedule'=>'Billing',
					'price(TRUE,TRUE)'=>'Price',
					'status(TRUE)'=>'Active',
					'account->accnum()'=>'Cust ID',
					'account->name()'=>'Customer',
				))
				->prepend(array(
					'id'=>array('url'=>URL::link('user','service/view/')),
				))
			);
	}

	/**
	 * List all services by their default checkout method
	 */
	public function action_listbycheckout() {
		$svs = array();
		// @todo This needs to be configurable
		$go = ORM::factory('Group',array('name'=>'Personal'));

		foreach (ORM::factory('Account')->where_active()->where_authorised($this->ao,'id')->find_all() as $ao)
			if ($ao->has_any('group',array($go)))
				foreach ($ao->service->list_active() as $so)
					if (! $so->service_billing->checkout_id)
						array_push($svs,$so);

		if ($svs)
			Block::factory()
				->title('Services that should be auto-billed')
				->title_icon('icon-pencil')
				->body(Table::factory()
					->jssort('services')
					->data($svs)
					->columns(array(
						'id'=>'ID',
						'service_name()'=>'Service',
						'recur_schedule'=>'Billing',
						'price(TRUE,TRUE)'=>'Price',
						'account->accnum()'=>'Cust ID',
						'account->name()'=>'Customer',
						'date_next_invoice'=>'Next Invoice',
						'due(TRUE)'=>'Due Invoices',
					))
					->prepend(array(
						'id'=>array('url'=>URL::link('user','service/view/')),
					))
				);

		foreach (ORM::factory('Checkout')->find_all() as $co) {
			$svs = array();

			foreach ($co->account->where('account.id','IN',$this->ao->RTM->customers($this->ao->RTM))->find_all() as $ao)
				foreach ($ao->service->list_active() as $so)
					if ($so->service_billing->checkout_id == $co->id)
						array_push($svs,$so);

			if ($svs)
				Block::factory()
					->title($co->name)
					->title_icon('icon-repeat')
					->body(Table::factory()
						->jssort($co->id)
						->data($svs)
						->columns(array(
							'id'=>'ID',
							'service_name()'=>'Service',
							'recur_schedule'=>'Billing',
							'price(TRUE,TRUE)'=>'Price',
							'account->accnum()'=>'Cust ID',
							'account->name()'=>'Customer',
							'date_next_invoice'=>'Next Invoice',
							'due(TRUE)'=>'Due Invoices',
						))
						->prepend(array(
							'id'=>array('url'=>URL::link('user','service/view/')),
						))
					);
		}
	}

	/**
	 * Show a list of expring services
	 */
	public function action_listexpiring() {
		Block::factory()
			->title('Customer Services Expiring')
			->title_icon('icon-th-list')
			->body(Table::factory()
				->jssort('services')
				->data(ORM::factory('Service')->where_authorised($this->ao)->list_expiring())
				->columns(array(
					'id'=>'ID',
					'expire(TRUE)'=>'Expiry',
					'service_name()'=>'Service',
					'recur_schedule'=>'Billing',
					'price(TRUE,TRUE)'=>'Price',
					'account->accnum()'=>'Cust ID',
					'account->name()'=>'Customer',
				))
				->prepend(array(
					'id'=>array('url'=>URL::link('user','service/view/')),
				))
			);
	}

	/**
	 * Show a list of expring services
	 */
	public function action_listinvoicesoon() {
		Block::factory()
			->title('Customer Services soon to be Invoiced')
			->title_icon('icon-th-list')
			->body(Table::factory()
				->jssort('services')
				->data(ORM::factory('Service')->where_authorised($this->ao)->list_invoicesoon(ORM::factory('Invoice')->config('GEN_SOON_DAYS')+30))
				->columns(array(
					'id'=>'ID',
					'expire(TRUE)'=>'Expiry',
					'service_name()'=>'Service',
					'recur_schedule'=>'Billing',
					'price(TRUE,TRUE)'=>'Price',
					'charges(TRUE,TRUE)'=>'Charges',
					'account->accnum()'=>'Cust ID',
					'account->name()'=>'Customer',
					'date_next_invoice'=>'Next Invoice',
				))
				->prepend(array(
					'id'=>array('url'=>URL::link('user','service/view/')),
				))
			);
	}
}
?>