diff --git a/app/controllers/documents_controller.php b/app/controllers/documents_controller.php index 6ce16c31..28288e2a 100755 --- a/app/controllers/documents_controller.php +++ b/app/controllers/documents_controller.php @@ -1,715 +1,738 @@ false, - 'limit' => 200, - 'order'=>array('Document.id' => 'desc') - ); + var $paginate = array( + 'contain' => false, + 'limit' => 200, + 'order'=>array('Document.id' => 'desc') + ); - var $components = array('Email'); + var $components = array('Email'); - function index() { - $this->Document->recursive = 0; - $this->set('documents', $this->paginate()); + function index() { + $this->Document->recursive = 0; + $this->set('documents', $this->paginate()); - $this->set('users', $this->Document->User->getUsersList()); - } - - function view($id = null) { - if (!$id) { - $this->Session->setFlash(__('Invalid Document.', true)); - $this->redirect(array('action'=>'index')); - } - $document = $this->Document->read(null,$id); - - $this->set('document', $document); - - $this->data = $document; - $docType = $this->Document->getDocType($document); - $this->set('docType', $docType); - - $this->set('docTypeFullName', $this->Document->getDocFullName($docType)); - $this->set('users', $this->Document->User->getUsersList()); - - $this->set('currency', $this->Document->getCurrency($document)); - $this->set('enquiry', $this->Document->getEnquiry($document)); - - $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $id)))); - $this->set('principles', $this->Document->LineItem->Product->Principle->find('list')); - - switch($docType) { - case 'quote': - $docTypeElement = 'document_quote_view'; - break; - case 'invoice': - $docTypeElement = 'document_invoice_view'; - $this->set('currencies', $this->Document->Invoice->Currency->find('list')); - $this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id'])))); - break; - case 'purchaseOrder': - $docTypeElement = 'document_purchase_order_view'; - break; - case 'orderAck': - $this->set('currencies', $this->Document->OrderAcknowledgement->Currency->find('list')); - $this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); - $docTypeElement = 'document_orderack_view'; - } - - $this->set('docTypeElement', $docTypeElement); - - // $this->set('principles', $this->Document->LineItem->Product->Principle->find('list')); - } - - - function getProducts($principleID = null) { - $this->layout = 'ajax'; - - if($principleID == null) { - echo "INVALID PRINCIPLE ID"; - } - else { - $products = $this->Document->LineItem->Product->find('list', array('conditions'=>array('Product.principle_id'=>$principleID))); - $this->set('products',$products); - } - } - - - /** - * Return a JSON object of the Product. - */ - function getProductDetails($productID = null) { - $this->layout = 'ajax'; - - if($productID == null) { - echo "INVALID PRODUCT ID"; - } - else { - $product = $this->Document->LineItem->Product->find('first',array('conditions'=>array('Product.id'=>$productID))); - $this->set('product',$product); - } - } - - - function getAttachments($documentID) { - $this->layout = 'ajax'; - if(!$documentID) { - echo "FAIL"; - } - else { - $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $documentID)))); - } - } - - function getAttachmentsByPrinciple($principleID) { - $this->layout = 'ajax'; - if(!$principleID) { - echo "FAIL"; - } - else { - $attachments = $this->Document->DocumentAttachment->Attachment->find('all', array('conditions'=>array('principle_id'=> $principleID, 'archived'=>0))); - $this->set('attachments', $attachments); - } - } - - function saveAttachments() { - $this->layout = 'ajax'; - if($this->data) { - $attachments = array(); - foreach($this->data['DocumentAttachment']['attachment_id'] as $i => $attachment_id) { - $docID = $this->data['DocumentAttachment']['document_id']; - $query = "DELETE FROM document_attachments WHERE document_id = {$docID} AND attachment_id = {$attachment_id}"; - $this->Document->DocumentAttachment->query($query); - - $attachment[$i]['DocumentAttachment']['document_id'] = $this->data['DocumentAttachment']['document_id']; - $attachment[$i]['DocumentAttachment']['attachment_id'] = $attachment_id; - } - if($this->Document->DocumentAttachment->saveAll($attachment)) { - echo "SUCCESS"; - } - else { - echo "FAIL"; - } - } - } - - function removeAttachments() { - $this->layout = 'ajax'; - foreach($this->data['DocumentAttachment'] as $attachment) { - - $this->Document->DocumentAttachment->delete($attachment['id']); + $this->set('users', $this->Document->User->getUsersList()); } - echo 'SUCCESS'; - } + function view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid Document.', true)); + $this->redirect(array('action'=>'index')); + } + $document = $this->Document->read(null,$id); + + $this->set('document', $document); + + $this->data = $document; + $docType = $this->Document->getDocType($document); + $this->set('docType', $docType); + + $this->set('docTypeFullName', $this->Document->getDocFullName($docType)); + $this->set('users', $this->Document->User->getUsersList()); + + $this->set('currency', $this->Document->getCurrency($document)); + $enquiry = $this->Document->getEnquiry($document); + $this->set('enquiry', $enquiry); + $this->set('jobs', $this->Document->OrderAcknowledgement->Job->find('list', + array('conditions'=> array('Job.customer_id' + => $enquiry['Enquiry']['customer_id']), 'recursive' =>0, 'order'=>'id DESC'))); + + + + $customerAddresses = $this->Document->User->Enquiry->BillingAddress->find('all', array('conditions'=>array('BillingAddress.customer_id' => $enquiry['Enquiry']['customer_id']))); + + + /* (2013). This STILL feels like an ugly hack. But it gets the desired effect and it will do for now. Screw it. */ + if(isset($customerAddresses[0]['BillingAddress'])) { + foreach ($customerAddresses as $address) { + $i = $address['BillingAddress']['id']; + $billing_address_list[$i] = $address['BillingAddress']['address'].'
'.$address['BillingAddress']['city'].' '.$address['State']['name'].' '.$address['BillingAddress']['postcode'].'
'.up($address['Country']['name']).'

'; + } + $this->set('billing_addresses_list', $billing_address_list); + $this->set('shipping_addresses_list', $billing_address_list); + } + else { + $this->set('billing_addresses_list', 'No Addresses exist for this Customer. Please add one'); + $this->set('shipping_addresses_list', 'No Addresses exist for this Customer. Please add one'); + } + + $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $id)))); + $this->set('principles', $this->Document->LineItem->Product->Principle->find('list')); + + switch($docType) { + case 'quote': + $docTypeElement = 'document_quote_view'; + break; + case 'invoice': + $docTypeElement = 'document_invoice_view'; + $this->set('currencies', $this->Document->Invoice->Currency->find('list')); + $this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id'])))); + break; + case 'purchaseOrder': + $docTypeElement = 'document_purchase_order_view'; + break; + case 'orderAck': + $this->set('currencies', $this->Document->OrderAcknowledgement->Currency->find('list')); + $this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); + $docTypeElement = 'document_orderack_view'; + } + + $this->set('docTypeElement', $docTypeElement); + + // $this->set('principles', $this->Document->LineItem->Product->Principle->find('list')); + } + + + function getProducts($principleID = null) { + $this->layout = 'ajax'; + + if($principleID == null) { + echo "INVALID PRINCIPLE ID"; + } + else { + $products = $this->Document->LineItem->Product->find('list', array('conditions'=>array('Product.principle_id'=>$principleID))); + $this->set('products',$products); + } + } + + + /** + * Return a JSON object of the Product. + */ + function getProductDetails($productID = null) { + $this->layout = 'ajax'; + + if($productID == null) { + echo "INVALID PRODUCT ID"; + } + else { + $product = $this->Document->LineItem->Product->find('first',array('conditions'=>array('Product.id'=>$productID))); + $this->set('product',$product); + } + } + + + function getAttachments($documentID) { + $this->layout = 'ajax'; + if(!$documentID) { + echo "FAIL"; + } + else { + $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $documentID)))); + } + } + + function getAttachmentsByPrinciple($principleID) { + $this->layout = 'ajax'; + if(!$principleID) { + echo "FAIL"; + } + else { + $attachments = $this->Document->DocumentAttachment->Attachment->find('all', array('conditions'=>array('principle_id'=> $principleID, 'archived'=>0))); + $this->set('attachments', $attachments); + } + } + + function saveAttachments() { + $this->layout = 'ajax'; + if($this->data) { + $attachments = array(); + foreach($this->data['DocumentAttachment']['attachment_id'] as $i => $attachment_id) { + $docID = $this->data['DocumentAttachment']['document_id']; + $query = "DELETE FROM document_attachments WHERE document_id = {$docID} AND attachment_id = {$attachment_id}"; + $this->Document->DocumentAttachment->query($query); + + $attachment[$i]['DocumentAttachment']['document_id'] = $this->data['DocumentAttachment']['document_id']; + $attachment[$i]['DocumentAttachment']['attachment_id'] = $attachment_id; + } + if($this->Document->DocumentAttachment->saveAll($attachment)) { + echo "SUCCESS"; + } + else { + echo "FAIL"; + } + } + } + + function removeAttachments() { + $this->layout = 'ajax'; + foreach($this->data['DocumentAttachment'] as $attachment) { + + $this->Document->DocumentAttachment->delete($attachment['id']); + } + echo 'SUCCESS'; + } + + + /** + * Create a New Document + * + * + * @param $type + * @param $id + */ + function newDocument($type = null, $enquiryid = null, $jobid = 0) { + if(!$type) { + $this->Session->setFlash('Invalid Doc Type or ID'); + } + + $this->Document->create(); + + switch($type) { + case "quote": + + $enquiry = $this->Document->Quote->Enquiry->findById($enquiryid); + + if(!$enquiry) { + $this->Session->setFlash('Invalid Enquiry ID'); + $this->redirect(array('action'=>'index')); + return; + } + + + $this->data['Quote']['enquiry_id'] = $enquiryid; + $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); + $this->data['Document']['revision'] = $number_of_revisions; + $this->data['Quote']['date_issued'] = date('Y-m-d'); + $this->data['Quote']['currency_id'] = 2; //All new Quotes default to AUD. + + $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; + + $this->data['Document']['type'] = 'quote'; + break; + case "invoice": + + $invoice_number_offset = 4436; //What Invoice number we are up to. Starting at 4500 due to the data loss. + + $number_of_invoices = $this->Document->Invoice->findCount(); + + $enquiry = $this->Document->Invoice->Enquiry->read(null, $enquiryid); + if(!$enquiry) { + $this->Session->setFlash('Invalid Enquiry ID'); + $this->redirect(array('action'=>'index')); + return; + } + + $newInvoiceNumber = $invoice_number_offset + $number_of_invoices; + $this->data['Invoice']['enquiry_id'] = $enquiryid; + $this->data['Invoice']['title'] = "CMCIN".$newInvoiceNumber; + $this->data['Invoice']['job_id'] = $jobid; + $this->data['Invoice']['customer_id'] = $enquiry['Enquiry']['customer_id']; + + $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; + //$number_of_revisions = $this->Document->Invoice->findCount('Invoice.enquiry_id ='. $enquiryid); + $this->data['Document']['revision'] = 0; //No revisions for Invoices. I have decreed it! + $this->data['Document']['type'] = 'invoice'; - /** - * Create a New Document - * - * - * @param $type - * @param $id - */ - function newDocument($type = null, $enquiryid = null, $jobid = 0) { - if(!$type) { - $this->Session->setFlash('Invalid Doc Type or ID'); - } - - $this->Document->create(); + $this->data['Invoice']['issue_date'] = date('Y-m-d'); //Argh. Quote model uses 'date_issed'. + $this->data['Invoice']['due_date'] = date("Y-m-d", strtotime("+30 days")); - switch($type) { - case "quote": - $enquiry = $this->Document->Quote->Enquiry->findById($enquiryid); + $this->data['Invoice']['currency_id'] = 2; //All new Invoices default to AUD. - if(!$enquiry) { - $this->Session->setFlash('Invalid Enquiry ID'); - $this->redirect(array('action'=>'index')); - return; - } + break; + case "purchaseOrder": + $count = $this->Document->PurchaseOrder->findCount(); + $count++; - $this->data['Quote']['enquiry_id'] = $enquiryid; - $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); - $this->data['Document']['revision'] = $number_of_revisions; - $this->data['Quote']['date_issued'] = date('Y-m-d'); - $this->data['Quote']['currency_id'] = 2; //All new Quotes default to AUD. + $offset = 2060; + $count += $offset; + $newPOnumber = "CMCPO".$count; + $this->data['PurchaseOrder']['title'] = $newPOnumber; + $this->data['PurchaseOrder']['issue_date'] = date('Y-m-d'); - $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; + $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; + $this->data['Document']['revision'] = 0; //No revisions for POs. I have decreed it! + $this->data['Document']['type'] = 'purchaseOrder'; + break; + case "orderAck": + $enquiry = $this->Document->OrderAcknowledgement->Enquiry->read(null, $enquiryid); + $this->data['OrderAcknowledgement']['job_id'] = $jobid; + $this->data['OrderAcknowledgement']['enquiry_id'] = $enquiryid; + $this->data['OrderAcknowledgement']['currency_id'] = 2; //Default to AUD. + $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; + $this->data['Document']['revision'] = 0; //No revisions for Order Acks. I have decreed it! + $this->data['Document']['type'] = 'orderAck'; + break; - $this->data['Document']['type'] = 'quote'; - break; - case "invoice": + } - $invoice_number_offset = 4436; //What Invoice number we are up to. Starting at 4500 due to the data loss. + if ($this->Document->saveAll($this->data)) { + $newid = $this->Document->id; - $number_of_invoices = $this->Document->Invoice->findCount(); + $this->Session->setFlash(__('The Document has been saved', true)); + $this->redirect(array('action'=>'view',$newid)); + } else { + $this->Session->setFlash(__('The Document could not be saved. Something went wrong! Ensure all fields are entered correctly.', true)); + } - $enquiry = $this->Document->Invoice->Enquiry->read(null, $enquiryid); - if(!$enquiry) { - $this->Session->setFlash('Invalid Enquiry ID'); - $this->redirect(array('action'=>'index')); - return; - } - $newInvoiceNumber = $invoice_number_offset + $number_of_invoices; - $this->data['Invoice']['enquiry_id'] = $enquiryid; - $this->data['Invoice']['title'] = "CMCIN".$newInvoiceNumber; - $this->data['Invoice']['job_id'] = $jobid; - $this->data['Invoice']['customer_id'] = $enquiry['Enquiry']['customer_id']; + } - $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; - //$number_of_revisions = $this->Document->Invoice->findCount('Invoice.enquiry_id ='. $enquiryid); - $this->data['Document']['revision'] = 0; //No revisions for Invoices. I have decreed it! - $this->data['Document']['type'] = 'invoice'; - $this->data['Invoice']['issue_date'] = date('Y-m-d'); //Argh. Quote model uses 'date_issed'. - $this->data['Invoice']['due_date'] = date("Y-m-d", strtotime("+30 days")); + /** + * Revise a Document. + * + * @param int $id - the document ID we want to make a new revision of. + * @return + */ + function revise($id = null) { + if(!$id) { + $this->Session->setFlash('Invalid Document ID'); + return; + } - $this->data['Invoice']['currency_id'] = 2; //All new Invoices default to AUD. + $document = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); - break; - case "purchaseOrder": + $this->set('document', $document); - $count = $this->Document->PurchaseOrder->findCount(); - $count++; + $this->Document->create(); - $offset = 2060; - $count += $offset; - $newPOnumber = "CMCPO".$count; - $this->data['PurchaseOrder']['title'] = $newPOnumber; - $this->data['PurchaseOrder']['issue_date'] = date('Y-m-d'); + if(!empty($document['Invoice']['id'])) { + echo "WE HAVE AN INVOICE"; + } + else if (!empty($document['Quote']['id'])) { - $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; - $this->data['Document']['revision'] = 0; //No revisions for POs. I have decreed it! - $this->data['Document']['type'] = 'purchaseOrder'; - break; - case "orderAck": - $enquiry = $this->Document->OrderAcknowledgement->Enquiry->read(null, $enquiryid); - $this->data['OrderAcknowledgement']['job_id'] = $jobid; - $this->data['OrderAcknowledgement']['enquiry_id'] = $enquiryid; - $this->data['OrderAcknowledgement']['currency_id'] = 2; //Default to AUD. - $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; - $this->data['Document']['revision'] = 0; //No revisions for Order Acks. I have decreed it! - $this->data['Document']['type'] = 'orderAck'; - break; + //First setup the Date and default valid until date. (30 days from today). - } + $today_date = date("Y-m-d"); + $valid_until = date("Y-m-d", strtotime("+30 days")); - if ($this->Document->saveAll($this->data)) { - $newid = $this->Document->id; + $newDoc = array(); - $this->Session->setFlash(__('The Document has been saved', true)); - $this->redirect(array('action'=>'view',$newid)); - } else { - $this->Session->setFlash(__('The Document could not be saved. Something went wrong! Ensure all fields are entered correctly.', true)); - } + $newDoc['Quote'] = $this->unset_keys($document['Quote'], array('id','created')); - } + $newDoc['Quote']['date_issued'] = $today_date; + $newDoc['Quote']['days_valid'] = 30; + $newDoc['Quote']['valid_until'] = $valid_until; + $enquiryid = $document['Quote']['enquiry_id']; + $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); + $newDoc['Document']['revision'] = $number_of_revisions; + $newDoc['Document']['type'] = 'quote'; - /** - * Revise a Document. - * - * @param int $id - the document ID we want to make a new revision of. - * @return - */ - function revise($id = null) { - if(!$id) { - $this->Session->setFlash('Invalid Document ID'); - return; - } + $newDoc['DocPage'] = $document['DocPage']; - $document = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); + foreach($newDoc['DocPage'] as $index => $li) { + $newDoc['DocPage'][$index]['id'] = null; + $newDoc['DocPage'][$index]['document_id'] = null; + } - $this->set('document', $document); + } - $this->Document->create(); + else if (!empty($document['PurchaseOrder']['id'])) { + echo "WE ARE REVISING A PO"; + } - if(!empty($document['Invoice']['id'])) { - echo "WE HAVE AN INVOICE"; - } - else if (!empty($document['Quote']['id'])) { - //First setup the Date and default valid until date. (30 days from today). + else if (!empty($document['OrderAcknowledgement']['id'])) { + echo "WE ARE REVISING An ORDER ACK"; + } - $today_date = date("Y-m-d"); - $valid_until = date("Y-m-d", strtotime("+30 days")); - $newDoc = array(); + /** Copy the LineItems from this Document. Applies to all of the Document Types */ + if(!empty($document['LineItem'])) { + $newDoc['LineItem'] = $document['LineItem']; + foreach($newDoc['LineItem'] as $index => $li) { + $newDoc['LineItem'][$index]['id'] = null; + $newDoc['LineItem'][$index]['document_id'] = null; + $newDoc['LineItem'][$index]['costing_id'] = null; + } + } - $newDoc['Quote'] = $this->unset_keys($document['Quote'], array('id','created')); + $this->set('newDoc', $newDoc); + // + //print_r($newDoc); + if ($this->Document->saveAll($newDoc)) { + $newid = $this->Document->id; + $this->Session->setFlash(__("Revision {$number_of_revisions} created", true)); + $this->redirect(array('action'=>'view',$newid)); + } else { + $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true)); + } - $newDoc['Quote']['date_issued'] = $today_date; - $newDoc['Quote']['days_valid'] = 30; - $newDoc['Quote']['valid_until'] = $valid_until; + } - $enquiryid = $document['Quote']['enquiry_id']; - $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); - $newDoc['Document']['revision'] = $number_of_revisions; - $newDoc['Document']['type'] = 'quote'; + function ajax_edit($id = null) { + $this->layout = 'ajax'; - $newDoc['DocPage'] = $document['DocPage']; + if (!$id && empty($this->data)) { + echo 'Invalid Document ID'; + } + if (!empty($this->data)) { + $docID = $this->data['Document']['id']; + $this->Document->DocPage->deleteAll(array('document_id'=>$docID)); + $this->Document->DocPage->updateCounterCache(array('document_id'=>$docID)); - foreach($newDoc['DocPage'] as $index => $li) { - $newDoc['DocPage'][$index]['id'] = null; - $newDoc['DocPage'][$index]['document_id'] = null; - } - } + if ($this->Document->saveAll($this->data)) { + echo 'SUCCESS'; + } else { + echo 'FAILURE'; + } + } + else { + echo 'FAILURE'; + } + } + - else if (!empty($document['PurchaseOrder']['id'])) { - echo "WE ARE REVISING A PO"; - } + /** + * + * Convert a Quote to an OrderAcknowledgement. + * + * Create a new Job for the Enquiry. + * + * Make a new Document (orderack) with the same LineItems as Quote with Document ID #$id + * + * + */ + function convert_to_oa() { + $this->layout = 'ajax'; + if (empty($this->data)) { + echo 'FAILURE'; + } + else { + $id = $this->data['Document']['id']; + $originalDoc = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); - else if (!empty($document['OrderAcknowledgement']['id'])) { - echo "WE ARE REVISING An ORDER ACK"; - } + $enquiry = $this->Document->OrderAcknowledgement->Enquiry->find('first', array('conditions'=>array('Enquiry.id'=>$originalDoc['Quote']['enquiry_id']))); + $enquiry['Enquiry']['status_id'] = 3; //Job Won, Order Placed + $this->Document->OrderAcknowledgement->Enquiry->save($enquiry); - /** Copy the LineItems from this Document. Applies to all of the Document Types */ - if(!empty($document['LineItem'])) { - $newDoc['LineItem'] = $document['LineItem']; - foreach($newDoc['LineItem'] as $index => $li) { - $newDoc['LineItem'][$index]['id'] = null; - $newDoc['LineItem'][$index]['document_id'] = null; - $newDoc['LineItem'][$index]['costing_id'] = null; - } - } + $customer = $this->Document->OrderAcknowledgement->Enquiry->Customer->find('first', array('conditions'=>array('Customer.id'=>$enquiry['Enquiry']['customer_id']))); + $customer['Customer']['customer_category_id'] = 3; //make Customer a Creditor - $this->set('newDoc', $newDoc); - // - //print_r($newDoc); - if ($this->Document->saveAll($newDoc)) { - $newid = $this->Document->id; - $this->Session->setFlash(__("Revision {$number_of_revisions} created", true)); - $this->redirect(array('action'=>'view',$newid)); - } else { - $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true)); - } + $this->Document->OrderAcknowledgement->Enquiry->Customer->save($customer); - } + $newDoc = array(); + if($this->data['Job']['create_new_job']) { + $job = $this->Document->OrderAcknowledgement->Job->newJob($enquiry, $this->data['Job']['customer_order_number']); //Only way to know Enquiry ID is if it's a Quote. + $newDoc['OrderAcknowledgement']['job_id'] = $job['Job']['id']; + } - function ajax_edit($id = null) { - $this->layout = 'ajax'; + $newDoc['Document']['type'] = 'orderAck'; + $newDoc['OrderAcknowledgement']['enquiry_id'] = $enquiry['Enquiry']['id']; + $newDoc['OrderAcknowledgement']['currency_id'] = 2; //Default to AUD. + $newDoc['OrderAcknowledgement']['issue_date'] = date('Y-m-d'); + + $newDoc['Document']['user_id']= $enquiry['Enquiry']['user_id']; + $newDoc['Document']['revision'] = 0; //No revisions for Order Acks. I have decreed it! + $newDoc['Document']['type'] = 'orderAck'; + + if(isset($enquiry['BillingAddress']['id'])) { + $newDoc['Document']['bill_to'] = ''.$customer['Customer']['name'].'
'; + $newDoc['Document']['bill_to'] .= $this->Document->OrderAcknowledgement->Enquiry->formatAddress($enquiry['BillingAddress']['id'], 'BillingAddress'); + } + + if(isset($enquiry['ShippingAddress']['id'])) { + $newDoc['Document']['ship_to'] = ''.$customer['Customer']['name'].'
'; + $newDoc['Document']['ship_to'] .= $this->Document->OrderAcknowledgement->Enquiry->formatAddress($enquiry['ShippingAddress']['id'], 'ShippingAddress'); + } + + + + /** Copy the LineItems from this Document. Applies to all of the Document Types */ + if(!empty($originalDoc['LineItem'])) { + $newDoc['LineItem'] = $originalDoc['LineItem']; + foreach($newDoc['LineItem'] as $index => $li) { + $newDoc['LineItem'][$index]['id'] = null; + $newDoc['LineItem'][$index]['document_id'] = null; + $newDoc['LineItem'][$index]['costing_id'] = null; + } + } - if (!$id && empty($this->data)) { - echo 'Invalid Document ID'; - } - if (!empty($this->data)) { - $docID = $this->data['Document']['id']; - $this->Document->DocPage->deleteAll(array('document_id'=>$docID)); - $this->Document->DocPage->updateCounterCache(array('document_id'=>$docID)); + if ($this->Document->saveAll($newDoc)) { + $newid = $this->Document->id; + if($job) { + $this->Session->setFlash(__("Job {$job['Job']['title']} and Order Acknowledgement created", true)); + } + else { + $this->Session->setFlash(__("Order Acknowledgement created", true)); + } + $this->redirect(array('action'=>'view',$newid)); + } else { + $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true)); + } + $this->Document->saveAll($newDoc); + } + } - if ($this->Document->saveAll($this->data)) { - echo 'SUCCESS'; - } else { - echo 'FAILURE'; - } - } - else { - echo 'FAILURE'; - } - } - + /** + * Convert an Order Acknowledgement to an Invoice. + * + * @TODO Finish this. + * + * @param $id + */ + function convert_to_invoice($id = null) { + if (!$id) { + echo 'Invalid Document ID'; + } + else { - /** - * - * Convert a Quote to an OrderAcknowledgement. - * - * Create a new Job for the Enquiry. - * - * Make a new Document (orderack) with the same LineItems as Quote with Document ID #$id - * - * - */ - function convert_to_oa() { - $this->layout = 'ajax'; - if (empty($this->data)) { - echo 'FAILURE'; - } - else { - $id = $this->data['Document']['id']; - $originalDoc = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); + } - $enquiry = $this->Document->OrderAcknowledgement->Enquiry->find('first', array('conditions'=>array('Enquiry.id'=>$originalDoc['Quote']['enquiry_id']))); - $enquiry['Enquiry']['status_id'] = 3; //Job Won, Order Placed - $this->Document->OrderAcknowledgement->Enquiry->save($enquiry); + } - $customer = $this->Document->OrderAcknowledgement->Enquiry->Customer->find('first', array('conditions'=>array('Customer.id'=>$enquiry['Enquiry']['customer_id']))); - $customer['Customer']['customer_category_id'] = 3; //make Customer a Creditor + function pdf($id = null) { + //Configure::write('debug',0); + if(!$id) { + $this->Session->setFlash(__('Invalid Document', true)); + $this->redirect(array('controller'=>'documents', 'action'=>'index')); + } - $this->Document->OrderAcknowledgement->Enquiry->Customer->save($customer); + $document = $this->Document->read(null,$id); - $job = $this->Document->OrderAcknowledgement->Job->newJob($enquiry, $this->data['Job']['customer_order_number']); //Only way to know Enquiry ID is if it's a Quote. + $this->set('document', $document); - + $this->data = $document; - if($job == false) { - echo 'Error: Unable to create Job'; - } - else { - $newDoc = array(); - $newDoc['Document']['type'] = 'orderAck'; - $newDoc['OrderAcknowledgement']['job_id'] = $job['Job']['id']; - $newDoc['OrderAcknowledgement']['enquiry_id'] = $enquiry['Enquiry']['id']; - $newDoc['OrderAcknowledgement']['currency_id'] = 2; //Default to AUD. - $newDoc['OrderAcknowledgement']['issue_date'] = date('Y-m-d'); - - $newDoc['Document']['user_id']= $enquiry['Enquiry']['user_id']; - $newDoc['Document']['revision'] = 0; //No revisions for Order Acks. I have decreed it! - $newDoc['Document']['type'] = 'orderAck'; - - if(isset($enquiry['BillingAddress']['id'])) { - $newDoc['Document']['bill_to'] = ''.$customer['Customer']['name'].'
'; - $newDoc['Document']['bill_to'] .= $this->Document->OrderAcknowledgement->Enquiry->formatAddress($enquiry['BillingAddress']['id'], 'BillingAddress'); - } - - if(isset($enquiry['ShippingAddress']['id'])) { - $newDoc['Document']['ship_to'] = ''.$customer['Customer']['name'].'
'; - $newDoc['Document']['ship_to'] .= $this->Document->OrderAcknowledgement->Enquiry->formatAddress($enquiry['ShippingAddress']['id'], 'ShippingAddress'); - } - - - - /** Copy the LineItems from this Document. Applies to all of the Document Types */ - if(!empty($originalDoc['LineItem'])) { - $newDoc['LineItem'] = $originalDoc['LineItem']; - foreach($newDoc['LineItem'] as $index => $li) { - $newDoc['LineItem'][$index]['id'] = null; - $newDoc['LineItem'][$index]['document_id'] = null; - $newDoc['LineItem'][$index]['costing_id'] = null; - } - } + $docType = $this->Document->getDocType($document); + $docTypeFullName = $this->Document->getDocFullName($docType); - if ($this->Document->saveAll($newDoc)) { - $newid = $this->Document->id; - $this->Session->setFlash(__("Job {$job['Job']['title']} and Order Acknowledgement created", true)); - $this->redirect(array('action'=>'view',$newid)); - } else { - $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true)); - } - $this->Document->saveAll($newDoc); - } - } - - } - /** - * Convert an Order Acknowledgement to an Invoice. - * - * @TODO Finish this. - * - * @param $id - */ - function convert_to_invoice($id = null) { - if (!$id) { - echo 'Invalid Document ID'; - } - else { + $currency = $this->Document->getCurrency($document); + $enquiry = $this->Document->getEnquiry($document); + $this->set('docType', $docType); + $this->set('docTypeFullName',strtoupper($docTypeFullName)); + $this->set('currency',$currency); + $this->set('currencyCode', $currency['Currency']['iso4217']); + $this->set('currencySymbol', $currency['Currency']['symbol']); - } + $gst = $enquiry['Enquiry']['gst']; + $this->set('gst', $gst); - } + if($gst == 1) { + $totalsDescText = array( + 'subtotal' => 'SUBTOTAL', + 'gst' => 'GST (10%)', + 'total' => 'TOTAL DUE' + ); + } + else { + $totalsDescText = array( + 'subtotal' => 'SUBTOTAL', + 'gst' => 'GST (10%)', + 'total' => 'TOTAL PAYABLE' + ); + } - function pdf($id = null) { - //Configure::write('debug',0); - if(!$id) { - $this->Session->setFlash(__('Invalid Document', true)); - $this->redirect(array('controller'=>'documents', 'action'=>'index')); - } + $totals = $this->calculateTotals($document, $gst); + $this->set('totals',$totals); + $this->set('totalsDescText',$totalsDescText); - $document = $this->Document->read(null,$id); + $this->set('currency', $currency); + $this->set('enquiry', $enquiry); - $this->set('document', $document); + $this->set('principlesList', $this->Document->LineItem->Product->Principle->find('list')); - $this->data = $document; + $this->set('products', $document['LineItem']); + $this->set('states', $this->Document->Invoice->Enquiry->State->find('list')); - $docType = $this->Document->getDocType($document); - $docTypeFullName = $this->Document->getDocFullName($docType); + //Set filename for the document. + // + switch($docType) { + case "quote": + $filename = $enquiry['Enquiry']['title']; + $template_name = 'pdf_quote'; + break; + case "invoice": + $filename = $document['Invoice']['title']; + $this->set('docTitle', $document['Invoice']['title']); + $this->set('job', $this->Document->Invoice->Job->find('first', array('conditions'=>array('Job.id'=>$document['Invoice']['job_id'])))); + $this->set('issue_date_string', date('d F Y', strtotime($document['Invoice']['issue_date']))); - $currency = $this->Document->getCurrency($document); - $enquiry = $this->Document->getEnquiry($document); + $this->set('ship_via', $document['Invoice']['ship_via']); + $this->set('fob', $document['Invoice']['fob']); - $this->set('docType', $docType); - $this->set('docTypeFullName',strtoupper($docTypeFullName)); - $this->set('currency',$currency); - $this->set('currencyCode', $currency['Currency']['iso4217']); - $this->set('currencySymbol', $currency['Currency']['symbol']); - $gst = $enquiry['Enquiry']['gst']; + $template_name = 'pdf_invoice'; + break; - $this->set('gst', $gst); + case "purchaseOrder": + $filename = $document['PurchaseOrder']['title']; + break; - if($gst == 1) { - $totalsDescText = array( - 'subtotal' => 'SUBTOTAL', - 'gst' => 'GST (10%)', - 'total' => 'TOTAL DUE' - ); - } - else { - $totalsDescText = array( - 'subtotal' => 'SUBTOTAL', - 'gst' => 'GST (10%)', - 'total' => 'TOTAL PAYABLE' - ); - } + case "orderAck": + $job = $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))); - $totals = $this->calculateTotals($document, $gst); - $this->set('totals',$totals); - $this->set('totalsDescText',$totalsDescText); + $filename = $job['Job']['title'].'_OrderAcknowledgement'; + $this->set('docTitle', $job['Job']['title']); - $this->set('currency', $currency); - $this->set('enquiry', $enquiry); + $this->set('docTypeFullName', 'JOB'); //So it doesnt say CMC order Ack # in the pdf_shipping_billing_box. This string is too long + $this->set('job', $job); + $this->set('issue_date_string', date('d F Y', strtotime($document['OrderAcknowledgement']['issue_date']))); - $this->set('principlesList', $this->Document->LineItem->Product->Principle->find('list')); + $this->set('ship_via', $document['OrderAcknowledgement']['ship_via']); + $this->set('fob', $document['OrderAcknowledgement']['fob']); + $this->set('estimated_delivery', $document['OrderAcknowledgement']['estimated_delivery']); - $this->set('products', $document['LineItem']); - $this->set('states', $this->Document->Invoice->Enquiry->State->find('list')); + $template_name = 'pdf_orderack'; + break; + } - //Set filename for the document. - // - switch($docType) { - case "quote": - $filename = $enquiry['Enquiry']['title']; - $template_name = 'pdf_quote'; - break; + if($document['Document']['revision'] > 0) { + $filename = $filename.'_'.$document['Document']['revision'].'.pdf'; + } + else { + $filename = $filename.'.pdf'; + } - case "invoice": - $filename = $document['Invoice']['title']; - $this->set('docTitle', $document['Invoice']['title']); - $this->set('job', $this->Document->Invoice->Job->find('first', array('conditions'=>array('Job.id'=>$document['Invoice']['job_id'])))); - $this->set('issue_date_string', date('d F Y', strtotime($document['Invoice']['issue_date']))); + $this->set('filename', $filename); + $document['Document']['pdf_filename'] = $filename; + $document['Document']['pdf_created_at'] = date('Y-m-d H:i:s'); + $document['Document']['pdf_created_by_user_id'] = $this->getCurrentUserID(); + if($this->Document->save($document)) { + //echo "Set pdf_filename attritbute to: ".$filename; + } + else { + //echo 'Failed to set pdf_filename to: '.$filename; + } - $this->set('ship_via', $document['Invoice']['ship_via']); - $this->set('fob', $document['Invoice']['fob']); + $colWidths = array( + 'item' => '7%', + 'qty' => '7%', + 'desc' => '56%', + 'unit' => '15%', + 'total' => '15%' - $template_name = 'pdf_invoice'; - break; + ); - case "purchaseOrder": - $filename = $document['PurchaseOrder']['title']; - break; + $this->set('colWidths',$colWidths); - case "orderAck": + $this->render($template_name); + } - $job = $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))); - $filename = $job['Job']['title'].'_OrderAcknowledgement'; - $this->set('docTitle', $job['Job']['title']); + //Called via AJAX to generate Quotation First Pages. + function generateFirstPage($id = null) { + $this->layout = 'ajax'; - $this->set('docTypeFullName', 'JOB'); //So it doesnt say CMC order Ack # in the pdf_shipping_billing_box. This string is too long - $this->set('job', $job); - $this->set('issue_date_string', date('d F Y', strtotime($document['OrderAcknowledgement']['issue_date']))); + if(!$id) { + return; + } - $this->set('ship_via', $document['OrderAcknowledgement']['ship_via']); - $this->set('fob', $document['OrderAcknowledgement']['fob']); - $this->set('estimated_delivery', $document['OrderAcknowledgement']['estimated_delivery']); + $document = $this->Document->read(null, $id); + $this->set('document',$document); + $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $id)))); + $enquiry = $this->Document->Quote->Enquiry->read(null, $document['Quote']['enquiry_id']); + $this->set('enquiry', $enquiry); + } - $template_name = 'pdf_orderack'; - break; - } - if($document['Document']['revision'] > 0) { - $filename = $filename.'_'.$document['Document']['revision'].'.pdf'; - } - else { - $filename = $filename.'.pdf'; - } - $this->set('filename', $filename); - $document['Document']['pdf_filename'] = $filename; - $document['Document']['pdf_created_at'] = date('Y-m-d H:i:s'); - $document['Document']['pdf_created_by_user_id'] = $this->getCurrentUserID(); - if($this->Document->save($document)) { - //echo "Set pdf_filename attritbute to: ".$filename; - } - else { - //echo 'Failed to set pdf_filename to: '.$filename; - } - - - $colWidths = array( - 'item' => '7%', - 'qty' => '7%', - 'desc' => '56%', - 'unit' => '15%', - 'total' => '15%' - - ); - - $this->set('colWidths',$colWidths); - - $this->render($template_name); - } - - - //Called via AJAX to generate Quotation First Pages. - function generateFirstPage($id = null) { - $this->layout = 'ajax'; - - if(!$id) { - return; - } - - $document = $this->Document->read(null, $id); - $this->set('document',$document); - $this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $id)))); - $enquiry = $this->Document->Quote->Enquiry->read(null, $document['Quote']['enquiry_id']); - $this->set('enquiry', $enquiry); - } - - - - - /** - * Email the PDF(document + attachments) for this Document to a Recipient (Customer or Principle). - * - * - * @param $id - Document ID - */ - function email_pdf($id) { - - //Setup the SMTP Options - $this->Email->smtpOptions = Configure::read('smtp_settings'); - $this->Email->delivery = 'smtp'; - - $document = $this->Document->read(null,$id); - - if(empty($document['Document']['pdf_filename'])) { - - - $this->Session->setFlash(__('Error. Please generate the PDF before attempting to email it', true)); - return; - } - else { - $pdf_dir = Configure::read('pdf_directory'); - - $attachment_files = array($pdf_dir.$document['Document']['pdf_filename']); - foreach($document['DocumentAttachment'] as $document_attachment) { - $attachment = $this->Document->DocumentAttachment->Attachment->read(null, $document_attachment['attachment_id']); - $attachment_files[] = $attachment['Attachment']['file']; - } - $this->Email->attachments = $attachment_files; - - } - $enquiry = $this->Document->getEnquiry($document); - - $this->Email->to = $enquiry['Contact']['email']; - - //Uncomment this when going live - $this->Email->cc = array($enquiry['User']['email']); - $this->Email->bcc = array('carpis@cmctechnologies.com.au'); - - $this->Email->subject = $enquiry['Enquiry']['title'].' '; - $this->Email->replyTo = $enquiry['User']['email']; - $this->Email->from = 'CMC Technologies - Sales '; - - $docType = $this->Document->getDocType($document); - - switch($docType) { - case 'quote': - $this->Email->subject .= 'Quotation'; - break; - case 'invoice': - $this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id'])))); - break; - case 'purchaseOrder': - $this->set('job', $this->Document->PurchaseOrder->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); - break; - case 'orderAck': - $this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); - } - - - $template = $docType.'_email'; - $this->Email->template = $template; - - - $this->Email->sendAs = 'both'; - $this->Email->charset = 'iso-8859-1'; - $this->set('enquiry', $enquiry); - $this->set('document', $document); - $this->set('DocFullName', $this->Document->getDocFullName($document['Document']['type'])); - if($this->Email->send()) { - $this->Session->setFlash(__('The Email has been sent', true)); - $this->redirect(array('action'=>'view/'.$id), null, false); - } - else { - $this->set('smtp_errors', $this->Email->smtpError); - $this->Session->setFlash(__('The Email has NOT been sent. Something went wrong.', true)); - $this->redirect(array('action'=>'view/'.$id), null, false); - - } - - } + /** + * Email the PDF(document + attachments) for this Document to a Recipient (Customer or Principle). + * + * + * @param $id - Document ID + */ + function email_pdf($id) { + + //Setup the SMTP Options + $this->Email->smtpOptions = Configure::read('smtp_settings'); + $this->Email->delivery = 'smtp'; + + $document = $this->Document->read(null,$id); + + if(empty($document['Document']['pdf_filename'])) { + + + $this->Session->setFlash(__('Error. Please generate the PDF before attempting to email it', true)); + return; + } + else { + $pdf_dir = Configure::read('pdf_directory'); + + $attachment_files = array($pdf_dir.$document['Document']['pdf_filename']); + foreach($document['DocumentAttachment'] as $document_attachment) { + $attachment = $this->Document->DocumentAttachment->Attachment->read(null, $document_attachment['attachment_id']); + $attachment_files[] = $attachment['Attachment']['file']; + } + $this->Email->attachments = $attachment_files; + + } + $enquiry = $this->Document->getEnquiry($document); + + $this->Email->to = $enquiry['Contact']['email']; + + //Uncomment this when going live + $this->Email->cc = array($enquiry['User']['email']); + $this->Email->bcc = array('carpis@cmctechnologies.com.au'); + + $this->Email->subject = $enquiry['Enquiry']['title'].' '; + $this->Email->replyTo = $enquiry['User']['email']; + $this->Email->from = 'CMC Technologies - Sales '; + + $docType = $this->Document->getDocType($document); + + switch($docType) { + case 'quote': + $this->Email->subject .= 'Quotation'; + break; + case 'invoice': + $this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id'])))); + break; + case 'purchaseOrder': + $this->set('job', $this->Document->PurchaseOrder->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); + break; + case 'orderAck': + $this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); + } + + + $template = $docType.'_email'; + $this->Email->template = $template; + + + $this->Email->sendAs = 'both'; + $this->Email->charset = 'iso-8859-1'; + $this->set('enquiry', $enquiry); + $this->set('document', $document); + $this->set('DocFullName', $this->Document->getDocFullName($document['Document']['type'])); + if($this->Email->send()) { + $this->Session->setFlash(__('The Email has been sent', true)); + $this->redirect(array('action'=>'view/'.$id), null, false); + } + else { + $this->set('smtp_errors', $this->Email->smtpError); + $this->Session->setFlash(__('The Email has NOT been sent. Something went wrong.', true)); + $this->redirect(array('action'=>'view/'.$id), null, false); + + } + + } diff --git a/app/models/document.php b/app/models/document.php index d56cc53d..aa1d7eb9 100755 --- a/app/models/document.php +++ b/app/models/document.php @@ -1,178 +1,178 @@ array( - 'className' => 'User', - 'foreignKey' => 'user_id', - 'conditions' => '', - 'fields' => '', - 'order' => '' - ) + 'User' => array( + 'className' => 'User', + 'foreignKey' => 'user_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) - ); + ); - var $hasMany = array( + var $hasMany = array( - 'LineItem' => array( - 'className' => 'LineItem', - 'foreignKey' => 'document_id', - 'order' => 'LineItem.item_number ASC' - ), + 'LineItem' => array( + 'className' => 'LineItem', + 'foreignKey' => 'document_id', + 'order' => 'LineItem.item_number ASC' + ), - 'DocPage' => array( - 'className'=> 'DocPage', - 'foreignKey' => 'document_id', - 'order' => 'DocPage.page_number ASC' - ), + 'DocPage' => array( + 'className'=> 'DocPage', + 'foreignKey' => 'document_id', + 'order' => 'DocPage.page_number ASC' + ), - 'DocumentAttachment' => array( - 'className'=> 'DocumentAttachment', - 'foreignKey' => 'document_id', - 'order' => 'DocumentAttachment.id ASC' - ), + 'DocumentAttachment' => array( + 'className'=> 'DocumentAttachment', + 'foreignKey' => 'document_id', + 'order' => 'DocumentAttachment.id ASC' + ), - ); + ); - var $hasOne = array( - 'Invoice' => array( - 'className' => 'Invoice', - 'foreignKey'=> 'document_id' - ), - 'Quote' => array( - 'className'=>'Quote', - 'foriegnKey'=>'document_id' - ), + var $hasOne = array( + 'Invoice' => array( + 'className' => 'Invoice', + 'foreignKey'=> 'document_id' + ), + 'Quote' => array( + 'className'=>'Quote', + 'foriegnKey'=>'document_id' + ), - 'PurchaseOrder' => array( - 'className'=>'PurchaseOrder', - 'foreignKey'=>'document_id' - ), + 'PurchaseOrder' => array( + 'className'=>'PurchaseOrder', + 'foreignKey'=>'document_id' + ), - 'OrderAcknowledgement' => array( - 'className' => 'OrderAcknowledgement', - 'foreignKey' => 'document_id' - ) - ); + 'OrderAcknowledgement' => array( + 'className' => 'OrderAcknowledgement', + 'foreignKey' => 'document_id' + ) + ); - //So much refactoring possible on this. - function getCurrency($document) { + //So much refactoring possible on this. + function getCurrency($document) { - if(!empty($document['Invoice']['id'])) { - $currencyID = $document['Invoice']['currency_id']; - $conditions = $this->__getCurrencyConditions($currencyID); + if(!empty($document['Invoice']['id'])) { + $currencyID = $document['Invoice']['currency_id']; + $conditions = $this->__getCurrencyConditions($currencyID); + + return $this->Invoice->Currency->find('first',$conditions); + + } + elseif(!empty($document['Quote']['id'])) { + $currencyID = $document['Quote']['currency_id']; + $conditions = $this->__getCurrencyConditions($currencyID); + return $this->Quote->Currency->find('first',$conditions); + + } + elseif(!empty($document['PurchaseOrder']['id'])) { + $currencyID = $document['PurchaseOrder']['currency_id']; + $conditions = $this->__getCurrencyConditions($currencyID); + return $this->PurchaseOrder->Currency->find('first',$conditions); + } + elseif(!empty($document['OrderAcknowledgement']['id'])) { + $currencyID = $document['OrderAcknowledgement']['currency_id']; + $conditions = $this->__getCurrencyConditions($currencyID); + return $this->OrderAcknowledgement->Currency->find('first',$conditions); + } + } + + + function __getCurrencyConditions($currencyID) { + return array('recursive'=>0, 'conditions'=>array('Currency.id'=>$currencyID)); + } + + function getDocType($document) { + return $document['Document']['type']; + } + + + function getDocFullName($type) { + + switch($type) { + case 'quote': + $fullName = 'Quotation'; + break; + case 'invoice': + $fullName = 'Invoice'; + break; + case 'purchaseOrder': + $fullName = 'Purchase Order'; + break; + case 'orderAck': + $fullName = 'Order Acknowledgement'; + break; + } + return $fullName; + } + + /** + * Depending on the type of document. Return the CMC reference + * ie. Enquiry Number (Quote) + * Invoice Number (Invoice) + * @param $document + * @param $type + */ + function getCMCReferenceNumber($document, $type) { + switch($type) { + case 'quote': + break; + case 'invoice': + break; + case 'purchaseOrder': + break; + case 'orderAck': + break; + } + return $fullName; + } + + + function getEnquiry($document) { + if(!empty($document['Invoice']['id'])) { + return $this->Invoice->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Invoice']['enquiry_id']))); + } + elseif(!empty($document['Quote']['id'])) { + return $this->Quote->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Quote']['enquiry_id']))); + } + elseif(!empty($document['PurchaseOrder']['id'])) { + return $this->PurchaseOrder->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Invoice']['enquiry_id']))); + } + elseif(!empty($document['OrderAcknowledgement']['id'])) { + return $this->OrderAcknowledgement->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['OrderAcknowledgement']['enquiry_id']))); + + } + } + /** + * Does GST apply on this document. Based on the Enquiry GST TinyInt. + * @param $enquiry + * @return Bool + */ + function gstApplies($enquiry) { + if ($enquiry['Enquiry']['gst'] == 0) { + return false; + } + else { + return true; + } + } + + function isLatestRevision($enquiry) { + $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiry); - return $this->Invoice->Currency->find('first',$conditions); } - elseif(!empty($document['Quote']['id'])) { - $currencyID = $document['Quote']['currency_id']; - $conditions = $this->__getCurrencyConditions($currencyID); - return $this->Quote->Currency->find('first',$conditions); - - } - elseif(!empty($document['PurchaseOrder']['id'])) { - $currencyID = $document['PurchaseOrder']['currency_id']; - $conditions = $this->__getCurrencyConditions($currencyID); - return $this->PurchaseOrder->Currency->find('first',$conditions); - } - elseif(!empty($document['OrderAcknowledgement']['id'])) { - $currencyID = $document['OrderAcknowledgement']['currency_id']; - $conditions = $this->__getCurrencyConditions($currencyID); - return $this->OrderAcknowledgement->Currency->find('first',$conditions); - } - } - - - function __getCurrencyConditions($currencyID) { - return array('recursive'=>0, 'conditions'=>array('Currency.id'=>$currencyID)); - } - - function getDocType($document) { - return $document['Document']['type']; - } - - - function getDocFullName($type) { - - switch($type) { - case 'quote': - $fullName = 'Quotation'; - break; - case 'invoice': - $fullName = 'Invoice'; - break; - case 'purchaseOrder': - $fullName = 'Purchase Order'; - break; - case 'orderAck': - $fullName = 'Order Acknowledgement'; - break; - } - return $fullName; - } - - /** - * Depending on the type of document. Return the CMC reference - * ie. Enquiry Number (Quote) - * Invoice Number (Invoice) - * @param $document - * @param $type - */ - function getCMCReferenceNumber($document, $type) { - switch($type) { - case 'quote': - break; - case 'invoice': - break; - case 'purchaseOrder': - break; - case 'orderAck': - break; - } - return $fullName; - } - - - function getEnquiry($document) { - if(!empty($document['Invoice']['id'])) { - return $this->Invoice->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Invoice']['enquiry_id']))); - } - elseif(!empty($document['Quote']['id'])) { - return $this->Quote->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Quote']['enquiry_id']))); - } - elseif(!empty($document['PurchaseOrder']['id'])) { - return $this->PurchaseOrder->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['Invoice']['enquiry_id']))); - } - elseif(!empty($document['OrderAcknowledgement']['id'])) { - return $this->OrderAcknowledgement->Enquiry->find('first',array('conditions'=>array('Enquiry.id'=>$document['OrderAcknowledgement']['enquiry_id']))); - - } - } - /** - * Does GST apply on this document. Based on the Enquiry GST TinyInt. - * @param $enquiry - * @return Bool - */ - function gstApplies($enquiry) { - if ($enquiry['Enquiry']['gst'] == 0) { - return false; - } - else { - return true; - } - } - - function isLatestRevision($enquiry) { - $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiry); - - - } } diff --git a/app/views/elements/document_orderack_view.ctp b/app/views/elements/document_orderack_view.ctp index 45c41bbb..14c057c2 100755 --- a/app/views/elements/document_orderack_view.ctp +++ b/app/views/elements/document_orderack_view.ctp @@ -1,13 +1,14 @@ -

Order Acknowledgement: link($job['Job']['title'], array('controller'=>'jobs', 'action'=>'view', $job['Job']['id']));?> for link($enquiry['Customer']['name'], '/customers/view/'.$enquiry['Customer']['id']);?>

+

Order Acknowledgement: link($job['Job']['title'], array('controller'=>'jobs', 'action'=>'view', $job['Job']['id']));?> for link($enquiry['Customer']['name'], '/customers/view/'.$enquiry['Customer']['id']);?>

+
link('Generate PDF of this Order Acknowledgement', '/documents/pdf/'.$document['Document']['id']);?> link('Email PDF to Customer', '/documents/email_pdf/'.$document['Document']['id']);?>
-