<?php
class JobsController extends AppController {

    var $name = 'Jobs';
    var $helpers = array('Html', 'Form', 'Text', 'Javascript', 'Number');

    var $components = array('RequestHandler');

    var $paginate = array(

	    'contain' => false,
	    'limit' => 100,
	    'order'=>array('Job.id' => 'desc')

    );

    function index($showUnpaid = null, $showUnsent = null) {
	$this->Job->recursive = 1;



	if(!empty($showUnpaid) && !empty($showUnsent)) {

	    $conditions = array(
		    'Job.all_paid' => 0,
		    'Job.all_sent' => 0,
	    );
	}

	else if(!empty($showUnpaid)) {
	    $conditions = array(
		    'Job.all_paid' => 0,

	    );
	}

	else if(!empty($showUnsent)) {
	    $conditions = array(
		    'Job.all_sent' => 0,
	    );
	}
	else {
	    $conditions = array();
	}

	$this->set('jobs', $this->paginate($conditions));

	$this->set('customers', $this->Job->Enquiry->Customer->find('list'));
	$this->set('currencies', $this->Job->Currency->find('list'));
	$this->set('principleList',$this->Job->Enquiry->Principle->find('list'));


	$this->set('sale_category_options', $this->sale_category_options());
	$this->set('sale_category_array', $this->sale_category_array());
	$this->set('job_type_options', $this->job_type_options());
	$this->set('shipment_category_options', $this->shipment_category_options());
	$this->set('freight_paid_by_options',$this->freight_paid_options());
	$this->set('gst_options', $this->gst_options());

    }

    /** Called via AJAX to get an editable row */
    function getEditableRow($id) {
	$this->layout = 'ajax';

	$job = $this->Job->find('first', array('conditions'=>array('Job.id'=>$id)));

	$this->set('job', $job);

	$this->data = $job;

	$this->set('shipment_category_options', $this->shipment_category_options());
	$this->set('yesNo', array(0=>'No', 1=>'Yes'));
	$this->set('currencies', $this->Job->Currency->find('list'));
	$this->set('sale_category_options', $this->sale_category_options());
	$this->set('sale_category_array', $this->sale_category_array());
	$this->set('job_type_options', $this->job_type_options());
	$this->set('freight_paid_by_options',$this->freight_paid_options());
	$this->set('gst_options', $this->gst_options());
	$this->set('job_status_options', $this->job_status_options());
	$this->set('principleList',$this->Job->Enquiry->Principle->find('list'));

    }

    /** Called via AJAX to get an viewable row */
    function getViewableRow($id) {
	$this->layout = 'ajax';
	$this->set('job', $this->Job->find('first', array('conditions'=>array('Job.id'=>$id))));


	$this->set('sale_category_options', $this->sale_category_options());
	$this->set('sale_category_array', $this->sale_category_array());
	$this->set('job_type_options', $this->job_type_options());
	$this->set('shipment_category_options', $this->shipment_category_options());
	$this->set('freight_paid_by_options',$this->freight_paid_options());
	$this->set('gst_options', $this->gst_options());
	$this->set('principleList',$this->Job->Enquiry->Principle->find('list'));


    }


    function reports() {
	$this->Job->recursive = 0;

	$jobs = $this->Job->find('all', array('fields'=>array('Job.date_order_received'), 'order'=>array('Job.date_order_received'=>'asc')));

	$monthList = $this->getYearMonths($jobs);

	$this->set('monthList', $monthList);
	/*	$this->set('jobs', $jobs);
	$this->set('customers', $this->Job->Enquiry->Customer->find('list'));
	$this->set('currencies', $this->Job->Currency->find('list'));*/

    }



    function viewReport($year, $month) {
	$this->layout = 'ajax';

	$this->set('year', $year);
	$this->set('month', $month);


	if(isset($month) && isset($year)) { //After a Specific Month for a Year

	    $nMonth = date('m',strtotime($month));

	    $startDate = $year.'-'.$nMonth.'-01';

	    $startDateTime = strtotime($startDate);

	    $numberOfDaysInMonth = date('t', $startDateTime);

	    $endDate = $year.'-'.$nMonth.'-'.$numberOfDaysInMonth;



	    $jobs = $this->Job->find('all', array('conditions'=>
		    array('Job.date_order_received BETWEEN ? AND ?'=>array($startDate, $endDate))));

	    $this->set('jobs', $jobs);

	    $this->set('principleList',$this->Job->Enquiry->Principle->find('list'));

	    $this->set('startDate',$startDate);
	    $this->set('endDate',$endDate);


	}

	elseif(isset($year) && !isset($month)) { //After a whole Years Stats.

	}

	else {
	    echo "Failure";
	}


	//$this->set('jobs', )



    }


    /**
     *	Build an array of Years/Months with Jobs.
     *
     *	Currently used in reports.ctp to build the Navigation list.
     *
     * @param Array $jobs
     * @return Array
     */
    function getYearMonths($jobs) {
	$weekList = array();
	foreach($jobs as $job) {
	    $time = strtotime($job['Job']['date_order_received']);
	    $year = date('Y', $time); //ISO-8601 year number
	    $month = date('F', $time);
	    //$monthList[$year][$month][] = $job;

	    if(!isset($monthList[$year][$month])) {
		$monthList[$year][$month] = 1;
	    }
	    else {
		$monthList[$year][$month]++;
	    }

	}
	krsort($monthList);

	return $monthList;
    }


    function job_status_options() {
	$options = array('ORDER RECEIVED FROM CUSTOMER',
		'ORDER PLACED ON PRINCIPLE - WAITING ON DELIVERY',
		'GOODS SHIPPED TO CUSTOMER',
		'WAITING ON DELIVERY',
		'MULTIPLE SHIPMENTS CMC WAITING ON ANOTHER DELIVERY',
		'GOODS DELIVERED TO CUSTOMER',
		'JOB CANCELLED',
		'JOB ON HOLD',
		'CUSTOMER TO PAY 100% WITH ORDER'
	);
	$options = $this->buildEnumOpts($options);
	return $options;
    }


    /**
     * For the 'sale_category' column.
     */
    function sale_category_options() {

	$options['Australian Sale'] = array(
		0 => "AS: Australian Customer & Australian Destination (GST Applies)",
		1 => "AS: Overseas Customer & Australian Destination (GST Applies)",
		2 => "AS: Commission from Australian Company or Supplier (GST Applies)",

	);

	$options['Exports'] = array(
		3 => "EX: Overseas Customer & Overseas Destination (no GST)",
		4 => "EX: Australian Customer & Overseas Destination (no GST)",
		5 => "EX: Commission from Overseas Company (no GST)"
	);


	return $options;
    }

    /** For viewing the sale Cat */
    function sale_category_array() {
	$options = array(
		0 => "AS: Australian Customer & Australian Destination (GST Applies)",
		1 => "AS: Overseas Customer & Australian Destination (GST Applies)",
		2 => "AS: Commission from Australian Company or Supplier (GST Applies)",
		3 => "EX: Overseas Customer & Overseas Destination (no GST)",
		4 => "EX: Australian Customer & Overseas Destination (no GST)",
		5 => "EX: Commission from Overseas Company (no GST)"
	);

	return $options;

    }





    /**
     * Build the Array for 'job_type'
     */
    function job_type_options() {

	//$options = array('INDENT','STOCK','COMMISSION','SERVICE');
	$options = array('GOODS','SERVICES');
	$enumOpts = $this->buildEnumOpts($options);
	return $enumOpts;
    }

    function shipment_category_options() {
	$options = array(
		0 => '',
		1 => 'Indent - via CMC',
		2 => 'Direct - Principle to final',
		3 => 'Stock',
		4 => 'No Shipment'
	);

	return $options;
    }

    function freight_paid_options() {
	$options = array('CMC', 'CUSTOMER');
	return $this->buildEnumOpts($options);
    }

    function gst_options() {
	$options = array(1=>'YES', 0=>'NO');
	return $options;
    }



    function buildEnumOpts($options) {

	$enumOpts = array();
	foreach($options as $opt) {
	    $enumOpts[$opt] = $opt;
	}
	return $enumOpts;
    }


    function ajax_edit() {
	if(!empty($this->data)) {
	    if ($this->Job->save($this->data)) {
		echo "SUCCESS";
	    }
	    else {
		echo "FAILURE";
	    }


	}
	else {
	    return;
	}

    }



    function view($id = null) {
	if (!$id) {
	    $this->flash(__('Invalid Job', true), array('action'=>'index'));
	}

	$job = $this->Job->read(null, $id);

	$emailIDs = array();
	foreach($job['Email'] as $email) {
	    $emailIDs[] = $email['id'];
	}
	$emails = $this->Job->Email->find('all', array('conditions'=>array('Email.id'=>$emailIDs)));
	$this->set('emails', $emails);




	$this->set('job', $job);
	$this->set('customer', $this->Job->Enquiry->Customer->findById($job['Enquiry']['customer_id']));
	$this->set('principles', $this->Job->PurchaseOrder->Principle->find('list'));
	$this->pageTitle = $job['Job']['title'];

    }

    function save_jobs() {
	if(isset($this->data)) {
	    //$data = json_decode($this->data);

	    print_r($this->data);
	}

    }


    function ajax_add($enquiryID) {
	$this->layout  = 'ajax';

	if(!isset($enquiryID)) {
	    return;
	}
	else {

	    $this->Job->create();

	    $job_offset = 6141;

	    $number_of_jobs = $this->Job->findCount();
	    $new_job_number = $job_offset + $number_of_jobs;

	    $enquiry = $this->Job->Enquiry->findById($enquiryID);
	    $monthYearShort = strtoupper(date("My"));

	    $jobLetter = $enquiry['State']['enqform'];

	    $this->data['Job']['title'] = $monthYearShort.$jobLetter."J".$new_job_number;
	    $this->data['Job']['state_id'] = $enquiry['Enquiry']['state_id'];
	    $this->data['Job']['customer_id'] = $enquiry['Enquiry']['customer_id'];
	    $this->data['Job']['contact_id'] = $enquiry['Enquiry']['contact_id'];
	    $this->data['Job']['enquiry_id'] = $enquiry['Enquiry']['id'];

	    if ($this->Job->save($this->data)) {
		echo "SUCCESS";
	    }
	    else {
		echo "FAILURE";
	    }
	}
    }

    function __isNotEmptyDate($date) {
	if($date == "0000-00-00") {
	    return true;
	}
	else {
	    return false;
	}
    }


     function autocomplete() {
	$this->layout = 'ajax';

	$query = strtolower($_GET["term"]);

	//$this->set('customers_json', print_r($this->data));

	if($query == null) {
	    return;
	}

	App::import('Core', 'Sanitize');

	$query = Sanitize::clean($query);

	$jobs = $this->Job->find('list', array(
		'conditions' => array(
			'Job.title LIKE' => '%'.$query.'%'
		),'fields' => array('Job.title'),
		'order' => array('Job.title ASC')



	));

	//print_r($POs);

	foreach ($jobs as $id => $job) {
	    $job_list[] = array('id'=> $id, 'label' => $job);
	}

	$jobs_json = json_encode($job_list);

	$this->set('jobs_json', $jobs_json);

    }


    /**
     * Need to fix the customer_id which hasn't been set for these 500odd records.
     *
     * Will fetch the right ID the same way the Index does, then update each record.
     */
    /*function fixJobs() {

	$jobs = $this->Job->find('all');

	foreach($jobs as $job) {
	    $this->Job->id = $job['Job']['id'];
	    $this->data = $job;

	    $this->data['Job']['customer_id'] = $job['Enquiry']['customer_id'];
	    $this->data['Job']['state_id'] = $job['Enquiry']['state_id'];
	    $this->data['Job']['contact_id'] = $job['Enquiry']['contact_id'];
	    $this->Job->save($this->data);
	    
	}

	$this->set('jobs', $this->Job->find('all'));




    }*/




}
?>