430 lines
9.9 KiB
PHP
Executable file
430 lines
9.9 KiB
PHP
Executable file
<?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;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 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'));
|
|
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
}
|
|
?>
|