cmc-sales/php/app/controllers/shipments_controller.php

473 lines
11 KiB
PHP
Executable file

<?php
class ShipmentsController extends AppController {
var $name = 'Shipments';
var $helpers = array('Html', 'Form');
var $paginate = array(
'contain' => false,
'limit' => 300,
'recursive' => 1
);
function index($type = 'all') {
$this->Shipment->recursive = 0;
switch($type) {
case 'all':
$conditions = array();
break;
case 'import':
$conditions = array('Shipment.type'=>1);
break;
case 'direct':
$conditions = array('Shipment.type'=>2);
break;
case 'export':
$conditions = array('Shipment.type'=>3);
break;
case 'local':
$conditions = array('Shipment.type'=>4);
break;
default:
}
$this->set('shipments', $this->paginate($conditions));
$this->set('type', $type);
$principles = $this->Shipment->Principle->find('list');
$freightForwarders = $this->Shipment->FreightForwarder->find('list');
$shipmentType = $this->typeOptions(false);
$shipmentTypeShort = $this->typeOptions(true);
$currencies = $this->Shipment->ShipmentInvoice->Currency->find('list', array('fields'=>array('Currency.id','Currency.iso4217')));
$principles = $this->Shipment->Principle->find('list');
$this->set(compact('principles', 'freightForwarders', 'shipmentType', 'shipmentTypeShort', 'currencies', 'principles'));
}
function view($id = null) {
if (!$id) {
$this->Session->setFlash(__('Invalid Shipment.', true));
$this->redirect(array('action'=>'index'));
}
$this->set('shipment', $this->Shipment->read(null, $id));
}
function add() {
$principles = $this->Shipment->Principle->find('list');
$freightForwarders = $this->Shipment->FreightForwarder->find('list');
$shipmentType = $this->typeOptions(false);
$shipmentTypeShort = $this->typeOptions(true);
$currencies = $this->Shipment->ShipmentInvoice->Currency->find('list');
$invoiceType = $this->invoiceTypeOptions();
$this->set('yesNo', array(0=>'No', 1=>'Yes'));
$this->set(compact('principles', 'freightForwarders', 'shipmentType', 'shipmentTypeShort', 'currencies','invoiceType', 'yesNo'));
}
function edit($id = null) {
if(isset($id)) {
if (empty($this->data)) {
$this->data = $this->Shipment->read(null, $id);
$address = $this->Shipment->Address->find('first', array('conditions'=>array('Address.id'=>$this->data['Shipment']['address_id']),'recursive'=>0));
$principles = $this->Shipment->Principle->find('list');
$freightForwarders = $this->Shipment->FreightForwarder->find('list');
$shipmentType = $this->typeOptions(false);
$shipmentTypeShort = $this->typeOptions(true);
$currencies = $this->Shipment->ShipmentInvoice->Currency->find('list');
$invoiceType = $this->invoiceTypeOptions();
$this->set('yesNo', array(0=>'No', 1=>'Yes'));
$this->set(compact('principles', 'freightForwarders', 'shipmentType', 'shipmentTypeShort', 'currencies','invoiceType', 'yesNo', 'address'));
}
}
}
function ajax_edit() {
$this->layout = 'ajax';
if(!empty($this->data)) {
//$this->Shipment->create($this->data);
$shipment_id = $this->data['Shipment']['id'];
$this->Shipment->Box->deleteAll(array('shipment_id'=>$shipment_id));
$this->Shipment->ShipmentInvoice->deleteAll(array('shipment_id'=>$shipment_id));
if ($this->Shipment->saveAll($this->data)) {
$this->Shipment->Box->updateCounterCache(array('shipment_id'=>$shipment_id));
$this->Shipment->ShipmentInvoice->updateCounterCache(array('shipment_id'=>$shipment_id));
/*$boxIDs = array();
foreach($this->data['Box'] as $box) {
$boxIDs[] = $box['id'];
}
$invoiceIDs = array();
foreach($this->data['ShipmentInvoice'] as $si) {
$invoiceIDs[] = $si['id'];
}
print_r($boxIDs);*/
if($this->data['Shipment']['type'] > 1) {
$jobIDs = array();
foreach($this->data['Job'] as $job) {
foreach($job as $index => $id) {
$jobIDs[] = $id;
}
}
$this->Shipment->Job->updateAll(array('Job.all_sent' => 1), array('Job.id'=>$jobIDs));
}
//print_r($this->data);
echo "SUCCESS";
}
else {
echo "FAILURE";
}
}
else {
echo "NO-DATA";
}
}
function ajax_add() {
$this->layout = 'ajax';
if(!empty($this->data)) {
$this->Shipment->create($this->data);
if ($this->Shipment->saveAll($this->data)) {
echo "SUCCESS";
}
else {
echo "FAILURE";
}
}
else {
echo "NO-DATA";
}
}
function markJobsSent() {
}
/* Moved the Views for Adding/Editing to elements. Called from the Index.
*
* function add($action = 'add') {
$principles = $this->Shipment->Principle->find('list');
$freightForwarders = $this->Shipment->FreightForwarder->find('list');
$shipmentType = $this->typeOptions();
$this->set(compact('principles', 'freightForwarders', 'shipmentType'));
}*/
function invoiceTypeOptions() {
$options = array('', 'Freight','Customs','Principle');
return $options;
}
function typeOptions($short = false) {
if($short == false) {
$options = array('','Import: Principle to CMC','Direct: Principle to Customer','Export','Local');
}
else {
$options = array('','Import','Direct','Export','Local');
}
return $options;
}
function delete($id = null) {
$this->layout = 'ajax';
if ($this->Shipment->del($id)) {
return "Deleted"; // This should be returning status codes
}
else {
return "Fail"; //All over the app.
}
}
function reports() {
$invoices = $this->Shipment->ShipmentInvoice->find('all');
/*foreach($shipments as $shipment) {
foreach($shipment['ShipmentInvoice'] as $si) {
if($si['deferred_gst'] == 1) {
echo $si['deferred_gst_amount']."\n";
}
}
}*/
$Fyears = $this->getFinancialYears($invoices);
$this->set('Fyears',$Fyears);
$this->set('invoices', $invoices);
}
function getFinancialYears($shipments) {
$Fyears = array();
foreach($shipments as $shipment) {
$time = strtotime($shipment['ShipmentInvoice']['date_issued']);
$year = date('Y', $time); //ISO-8601 year number
$startFYunix = $this->getFirstDayFY($year); //1 July of $year.
if($time < $startFYunix) { //Date is before 1 July $year.
$lastYear = $year - 1;
if(!isset($Fyears[$year])) {
$Fyears[$year] = 1;
}
else {
$Fyears[$year]++;
}
}
else { //Date is After 1 July $year.
$nextYear = $year + 1;
if(!isset($Fyears[$nextYear])) {
$Fyears[$nextYear] = 1;
}
else {
$Fyears[$nextYear]++;
}
}
}
krsort($Fyears); //Sort the array in reverse order, most recent to oldest.
return $Fyears;
}
function viewReport($year, $month = null) {
$this->layout = 'ajax';
if(isset($month) && isset($year)) { //After a Specific Month for a Year
$startDate = $year.'-'.$month.'-01';
$startDateTime = strtotime($startDate);
$numberOfDaysInMonth = date('t', $startDateTime);
$endDate = $year.'-'.$month.'-'.$numberOfDaysInMonth;
$monthStrings = array(
'01'=>'January',
'02'=> 'February',
'03'=>'March',
'04'=> 'April',
'05'=> 'May',
'06'=> 'June',
'07'=> 'July',
'08'=> 'August',
'09'=> 'September',
'10'=> 'October',
'11'=> 'November',
'12' => 'December');
$jobRangeTitle = $monthStrings[$month]." $year";
$shipmentInvoices = $this->Shipment->ShipmentInvoice->find('all', array('recursive'=>1, 'conditions'=>
array('ShipmentInvoice.date_issued BETWEEN ? AND ?'=>array($startDate, $endDate)),
'order'=>'ShipmentInvoice.date_issued ASC'));
$shipments = $this->Shipment->find('all');
$jobList = array();
foreach($shipments as $shipment) {
$jobListString = '';
foreach($shipment['Job'] as $job) {
$jobListString .= '<a href="/jobs/view/'.$job['id'].'">'.$job['title'].'</a> '; //Goddamn
//$html->link($job['Job']['title'], '/jobs/view/'.$job['Job']['id']).' ';
}
$jobList[$shipment['Shipment']['id']] = $jobListString;
}
$this->set('jobList', $jobList);
/* $dateStringFormat = 'j F Y';
$dateString['first'] = date($dateStringFormat, $firstDayUnix);
$dateString['last'] = date($dateStringFormat, $lastDayUnix);
*/
$this->set('jobRangeTitle', $jobRangeTitle);
$this->set('year', $year);
$this->set('month', $month);
$this->set('shipments',$shipmentInvoices); //ugh.
// $this->set('totals', $this->getTotals($jobs));
$this->set('principleList',$this->Shipment->Job->Enquiry->Principle->find('list'));
$this->set('startDate',$startDate);
$this->set('endDate',$endDate);
}
elseif(isset($year) && !isset($month)) { //Requested a whole Financial Year Jobs
$this->set('year', $year);
$lastDayUnix = $this->getLastDayFY($year);
$firstDayUnix = $this->getFirstDayFY($year,true);
$lastDayDate = date('Y-m-d', $lastDayUnix);
$firstDayDate = date('Y-m-d', $firstDayUnix);
$dateStringFormat = 'j F Y';
$dateString['first'] = date($dateStringFormat, $firstDayUnix);
$dateString['last'] = date($dateStringFormat, $lastDayUnix);
if($year == 0) { //Jobs with an empty 'date_order_received
$jobs = $this->Job->find('all', array('conditions'=>array('Job.date_order_received'=>'0000-00-000')));
$jobRangeTitle = "Jobs without Order Received date";
}
else { //We're looking for Jobs that have an 'date_order_received'
$jobs = $this->Job->find('all', array('conditions'=>
array('Job.date_order_received BETWEEN ? AND ?'=>array($firstDayDate, $lastDayDate))
)
);
$lastYear = $year - 1;
$jobRangeTitle = $lastYear.' - '.$year.' ('.$dateString['first']." to ".$dateString['last'].')';
}
$this->set('jobRangeTitle', $jobRangeTitle);
$this->set('shipments',$shipments);
$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());
$this->set('totals', $this->getTotals($jobs));
// print_r($totals);
//print_r($jobs);
}
else {
echo "Failure";
}
//$this->set('jobs', )
}
function setInvoiceDates() {
$shipments = $this->Shipment->find('all');
foreach($shipments as $shipment) {
$created = $shipment['Shipment']['created'];
foreach($shipment['ShipmentInvoice'] as $si) {
$this->Shipment->ShipmentInvoice->id = $si['id'];
$this->data = $si;
$this->data['created'] = $created;
$this->data['date_issued'] = date('Y-m-d', strtotime($created));
if($this->Shipment->ShipmentInvoice->save($this->data)) {
echo 'Updated '.$si['id']."to have {$created} as created and date_issued"."<br>";
}
else {
echo "Unable to save ".$si['id']."<br>";
}
}
}
}
}
?>