<?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() {
		Block::factory()
			->title(sprintf('Invoices for Account: %s',$this->ao->accnum()))
			->title_icon('icon-th-list')
			->body(Table::factory()
				->jssort('invoices')
				->data($this->ao->invoice->find_all())
					->columns(array(
						'id'=>'ID',
						'date_orig'=>'Date Issued',
						'due_date'=>'Date Due',
						'total(TRUE)'=>'Total',
						'total_credits(TRUE)'=>'Credits',
						'payments_total(TRUE)'=>'Payments',
						'due(TRUE)'=>'Still Due',
					))
					->prepend(array(
						'id'=>array('url'=>URL::link('user','invoice/view/')),
					))
			);
	}

	/**
	 * 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');

		$output .= '<br>';

		$output .= HTML::anchor(URL::link('user','invoice/email/'.$io->id),'Email',array('class'=>'btn pull-right'));
		$output .= HTML::anchor(URL::link('user','invoice/download/'.$io->id),'Download',array('class'=>'btn pull-right'));

		if ($io->due() AND ! $io->cart_exists())
			$output .= View::factory('invoice/user/view/pay')
				->set('mid',$io->mid())
				->set('o',$io);

		if (! $io->status) {
			Style::factory()
				->type('file')
				->data('media/css/pages/invoice.css');

			$output .= '<div id="watermark">Invoice CANCELLED.</div>';
		}

		Block::factory()
			->title(sprintf('%s: %s - %s',_('Invoice'),$io->refnum(),$io->account->name()))
			->title_icon('icon-list-alt')
			->body($output);

		$x = $io->invoice_memo->find_all();
		if ($x->count())
			Block::factory()
				->title('Invoice Memos')
				->title_icon('icon-list-alt')
				->span(6)
				->body(Table::factory()
					->data($x)
					->columns(array(
						'id'=>'ID',
						'date_orig'=>'Date',
						'account->name()'=>'Account',
						'memo'=>'Memo',
				)));

		$x = $io->email()->find_all();
		if ($x->count())
			Block::factory()
				->title('Invoice Emails')
				->title_icon('icon-list-alt')
				->span(6)
				->body(Table::factory()
					->data($x)
					->columns(array(
						'id'=>'ID',
						'date_orig'=>'Date',
						'resolve("subject")'=>'Subject',
					))
					->prepend(array(
						'id'=>array('url'=>URL::link('user','email/view/')),
					))
					->postproc(array(
						'resolve("subject")'=>array('trim'=>55),
					))
				);
	}
}
?>
