layout = 'ajax'; if(!empty($this->data)) { $this->LineItem->create($this->data); if ($this->LineItem->save($this->data)) { echo "SUCCESS"; // matching on strings rather than HTTP status codes :( $this->updateInvoice($this->data['LineItem']['document_id']); } else { echo "FAILURE"; //print_r($this->data); } } else { echo "NO-DATA"; } } function ajax_edit() { $this->layout = 'ajax'; if(!empty($this->data)) { if ($this->LineItem->save($this->data)) { echo "SUCCESS"; $this->updateInvoice($this->data['LineItem']['document_id']); } else { echo "FAILURE"; } } else { echo "NO-DATA"; } } function ajax_delete($id = null) { $this->layout = 'ajax'; if($id == null) { echo "FAILURE"; } else { if ($this->LineItem->del($id)) { echo "SUCCESS"; $this->updateInvoice($this->data['LineItem']['document_id']); } else { echo "FAILURE"; } } } /** * Get the products table with prices (for quotes, invoices etc) * @param $documentID */ function getTable($documentID = null) { $this->layout = 'ajax'; if($documentID == null) { echo "INVALID DOCUMENT ID"; } else { $document = $this->LineItem->Document->find('first',array('conditions'=>array('Document.id'=>$documentID))); $this->set('document',$document); $enquiry = $this->LineItem->Document->getEnquiry($document); $this->set('enquiry', $enquiry); $gst = $this->LineItem->Document->gstApplies($enquiry); $this->set('gst',$gst); $this->set('totals', $this->calculateTotals($document, $gst)); $currency = $this->LineItem->Document->getCurrency($document); $this->set('currencyCode', $currency['Currency']['iso4217']); $this->set('currencySymbol', $currency['Currency']['symbol']); } } function edit($id = null) { $this->layout = 'ajax'; $this->data = $this->LineItem->read(null,$id); $this->set('yesNo', array(0=>'No', 1=>'Yes')); $this->set('principles', $this->LineItem->Product->Principle->find('list')); } function add($documentID = null) { $this->layout = 'ajax'; $document = $this->LineItem->Document->read(null, $documentID); $this->set('document', $document); $this->set('yesNo', array(0=>'No', 1=>'Yes')); $this->set('principles', $this->LineItem->Product->Principle->find('list')); } // Adding or editing an Invoice means we need to update the invoiced_amount column // issue #54 function updateInvoice($documentID) { // If we've changed a line_item for an invoice, update the invoiced amount // on the invoices table. $document = $this->LineItem->Document->find('first', array('conditions' => array('Document.id' => $documentID), 'recursive'=>1)); // For invoices, we need to save the calculated invoice total to implement issue #54. if($document['Document']['type'] == 'invoice') { $enquiry = $this->LineItem->Document->getEnquiry($document); $invoice = $this->LineItem->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id']))); $totals = $this->calculateTotals($document, $enquiry['Enquiry']['gst']); $invoice['Invoice']['amount_invoiced'] = $totals['total']; $this->LineItem->Document->Invoice->save($invoice); } } } ?>