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

/**
 * This class provides User Invoice functions
 *
 * @package    Invoice
 * @category   Controllers/User
 * @author     Deon George
 * @copyright  (c) 2009-2013 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
class Controller_User_Invoice extends Controller_Invoice {
	protected $secure_actions = array(
		'download'=>TRUE,
		'email'=>TRUE,
		'list'=>TRUE,
		'view'=>TRUE,
	);

	/**
	 * Download an invoice
	 */
	public function action_download() {
		$io = ORM::factory('Invoice',$this->request->param('id'));

		if (! $io->loaded() OR ! Auth::instance()->authorised($io->account))
			throw HTTP_Exception::factory(403,'Service either doesnt exist, or you are not authorised to see it');

		// Log the download
		$imo = $io->invoice_memo;
		$imo->invoice_id = $io->id;
		$imo->account_id = $this->ao->id;
		$imo->type = 'download';
		$imo->memo = 'Invoice Downloaded.';
		$imo->save();

		$this->response->body(Invoice::instance($io)->render('pdf','all',array('download'=>sprintf('%s.pdf',$io->refnum()))));
		$this->response->headers(array('Content-Type' => 'application/pdf'));
		$this->auto_render = FALSE;
	}

	/**
	 * Email an invoice
	 */
	public function action_email() {
		$io = ORM::factory('Invoice',$this->request->param('id'));

		if (! $io->loaded() OR ! Auth::instance()->authorised($io->account))
			throw HTTP_Exception::factory(403,'Service either doesnt exist, or you are not authorised to see it');

		if ($x=Invoice::instance($io)->render('email','all')) {
			// Log the emailling
			$imo = $io->invoice_memo;
			$imo->invoice_id = $io->id;
			$imo->account_id = $this->ao->id;
			$imo->type = 'email';
			$imo->memo = 'Invoice Emailed.';
			$imo->save();

			SystemMessage::factory()
				->title('Invoice')
				->type('success')
				->body(sprintf('Invoice :%s sent via email',$io->refnum()));

			HTTP::redirect(URL::link('user','email/view/'.$x));

		} else {
			HTTP::redirect(URL::link('user','invoice/view/'.$io->id));
		}
	}

	/**
	 * Show a list of invoices
	 */
	public function action_list() {
		$this->meta->title = 'Invoice List';

		Block::factory()
			->title(sprintf('Invoices for Account: %s',$this->ao->refnum()))
			->title_icon($this->icon)
			->body(View::factory('invoice/user/list')->set('o',$this->ao->invoice->find_all()));
	}

	/**
	 * View an Invoice
	 */
	public function action_view() {
		list($id,$output) = Table::page(__METHOD__);

		$io = ORM::factory('Invoice',$id);

		if (! $io->loaded() OR ! Auth::instance()->authorised($io->account))
			throw HTTP_Exception::factory(403,'Service either doesnt exist, or you are not authorised to see it');

		$output .= Invoice::instance($io)->render('html','all');


		$this->template->content = View::factory('invoice/user/view')->set('o',$io)->set('output',$output);
	}
}
?>