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('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()); } /** 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()); } 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)) { print_r($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 add() { if (!empty($this->data)) { $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($this->data['Job']['enquiry_id']); $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']; if ($this->Job->save($this->data)) { $jobid = $this->Job->id; //$this->Job->Enquiry->set('status_id', 3); //Change status to 'Job Won'; $enquiry['Enquiry']['status_id'] = 3; $this->Job->Enquiry->save($enquiry); $this->Session->setFlash(__('Job Saved', true)); $this->redirect(array('action'=>'view', $jobid)); } else { $this->Session->setFlash(__('Please Fix the Errors Below', true)); $enquiry = $this->Job->Enquiry->findById($this->data['Job']['enquiry_id']); $this->set(compact('enquiry')); } } else { if(isset($this->params['named']['enquiryid'])) { $enquiry = $this->Job->Enquiry->findById($this->params['named']['enquiryid']); $this->set(compact('enquiry')); } else { $this->Session->setFlash(__('Invalid Enquiry ID', true)); $this->redirect(array('action'=>'index')); } } $freight_paid_options = array("CMC"=>"CMC", "Customer"=>"Customer"); $this->set('freight_paid_options', $freight_paid_options); $sale_category_options = array("INDENT"=>"INDENT", "STOCK"=>"STOCK", "COMMISSION"=>"COMMISSION"); $this->set('sale_category_options', $sale_category_options); $this->set('shipment_category_options', $this->shipment_category_options()); } function edit($id = null) { if (!$id && empty($this->data)) { $this->flash(__('Invalid Job', true), array('action'=>'index')); } if (!empty($this->data)) { $jobid = $this->data['Job']['id']; if ($this->Job->save($this->data)) { // $this->flash(__('The Job has been saved.', true), array('action'=>'view', $jobid)); $this->Session->setFlash(__('The Job has been saved', true)); $this->redirect(array('action' =>'view/'.$jobid), null, false); } else { } } if (empty($this->data)) { $job = $this->Job->read(null, $id); $this->data = $job; $this->set('currencies', $this->Job->Currency->find('list')); } $freight_paid_options = array("CMC"=>"CMC", "Customer"=>"Customer"); $this->set('freight_paid_options', $freight_paid_options); $sale_category_options = array("INDENT"=>"INDENT", "STOCK"=>"STOCK", "COMMISSION"=>"COMMISSION"); $this->set('sale_category_options', $sale_category_options); $this->set('shipment_category_options', $this->shipment_category_options()); } function __isNotEmptyDate($date) { if($date == "0000-00-00") { return true; } else { return false; } } /** * 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')); }*/ } ?>