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 .= ''.$job['title'].' '; //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"."
"; } else { echo "Unable to save ".$si['id']."
"; } } } } } ?>