From 743ce3cec5b70223948923278715edfa377b7b0f Mon Sep 17 00:00:00 2001 From: Karl Cordes Date: Sat, 17 Nov 2012 14:36:36 +1100 Subject: [PATCH] Indenting changes --- controllers/documents_controller.php | 1200 +++++++++++++------------- views/enquiries/view.ctp | 17 +- 2 files changed, 609 insertions(+), 608 deletions(-) diff --git a/controllers/documents_controller.php b/controllers/documents_controller.php index 7086736e..6f0b77e4 100755 --- a/controllers/documents_controller.php +++ b/controllers/documents_controller.php @@ -1,629 +1,629 @@ false, - 'limit' => 200, - 'order'=>array('Document.id' => 'desc') + var $paginate = array( + 'contain' => false, + 'limit' => 200, + 'order'=>array('Document.id' => 'desc') + ); + + var $components = array('Email'); + + 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)); + + + + 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); + } + } + + + /** + * 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'; + + $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")); + + + $this->data['Invoice']['currency_id'] = 2; //All new Invoices default to AUD. + + break; + case "purchaseOrder": + + $count = $this->Document->PurchaseOrder->findCount(); + $count++; + + $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']['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; + + } + + if ($this->Document->saveAll($this->data)) { + $newid = $this->Document->id; + + $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)); + } + + + } + + + /** + * 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; + } + + $document = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); + + $this->set('document', $document); + + $this->Document->create(); + + 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). + + $today_date = date("Y-m-d"); + $valid_until = date("Y-m-d", strtotime("+30 days")); + + $newDoc = array(); + + + $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'; + + + $newDoc['DocPage'] = $document['DocPage']; + + foreach($newDoc['DocPage'] as $index => $li) { + $newDoc['DocPage'][$index]['id'] = null; + $newDoc['DocPage'][$index]['document_id'] = null; + } + + } + + else if (!empty($document['PurchaseOrder']['id'])) { + echo "WE ARE REVISING A PO"; + } + + + else if (!empty($document['OrderAcknowledgement']['id'])) { + echo "WE ARE REVISING An ORDER ACK"; + } + + + /** 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; + } + } + + + $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)); + } + + } + + + function ajax_edit($id = null) { + $this->layout = 'ajax'; + + 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($this->data)) { + echo 'SUCCESS'; + } else { + echo 'FAILURE'; + } + } + else { + echo 'FAILURE'; + } + } + + + /** + * + * 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 + + $this->Document->OrderAcknowledgement->Enquiry->Customer->save($customer); + + $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. + + 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; + } + } + + 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 { + + + } + + + } + + + function pdf($id = null) { + //Configure::write('debug',0); + if(!$id) { + $this->Session->setFlash(__('Invalid Document', true)); + $this->redirect(array('controller'=>'documents', 'action'=>'index')); + } + + $document = $this->Document->read(null,$id); + + $this->set('document', $document); + + $this->data = $document; + + $docType = $this->Document->getDocType($document); + $docTypeFullName = $this->Document->getDocFullName($docType); + + + + $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' + ); + } + + + $totals = $this->calculateTotals($document, $gst); + $this->set('totals',$totals); + $this->set('totalsDescText',$totalsDescText); + + $this->set('currency', $currency); + $this->set('enquiry', $enquiry); + + $this->set('principlesList', $this->Document->LineItem->Product->Principle->find('list')); + + $this->set('products', $document['LineItem']); + $this->set('states', $this->Document->Invoice->Enquiry->State->find('list')); + + + //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']))); + + $this->set('ship_via', $document['Invoice']['ship_via']); + $this->set('fob', $document['Invoice']['fob']); + + + $template_name = 'pdf_invoice'; + break; + + case "purchaseOrder": + $filename = $document['PurchaseOrder']['title']; + break; + + case "orderAck": + + $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']); + + $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('ship_via', $document['OrderAcknowledgement']['ship_via']); + $this->set('fob', $document['OrderAcknowledgement']['fob']); + $this->set('estimated_delivery', $document['OrderAcknowledgement']['estimated_delivery']); + + $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%' + ); - var $components = array('Email'); + $this->set('colWidths',$colWidths); - function index() { - $this->Document->recursive = 0; - $this->set('documents', $this->paginate()); + $this->render($template_name); + } - $this->set('users', $this->Document->User->getUsersList()); + + //Called via AJAX to generate Quotation First Pages. + function generateFirstPage($id = null) { + $this->layout = 'ajax'; + + if(!$id) { + return; } - function view($id = null) { - if (!$id) { - $this->Session->setFlash(__('Invalid Document.', true)); - $this->redirect(array('action'=>'index')); - } - $document = $this->Document->read(null,$id); + $document = $this->Document->read(null, $id); + $this->set('document',$document); + $enquiry = $this->Document->Quote->Enquiry->read(null, $document['Quote']['enquiry_id']); + $this->set('enquiry', $enquiry); + } - $this->set('document', $document); + /** + * Email the PDF(document + attachments) for this Document to a Recipient (Customer or Principle). + * + * + * @param $id - Document ID + */ + function email_pdf($id) { - $this->data = $document; - $docType = $this->Document->getDocType($document); - $this->set('docType', $docType); + //Setup the SMTP Options + $this->Email->smtpOptions = Configure::read('smtp_settings'); + $this->Email->delivery = 'smtp'; - $this->set('docTypeFullName', $this->Document->getDocFullName($docType)); - $this->set('users', $this->Document->User->getUsersList()); + $document = $this->Document->read(null,$id); - $this->set('currency', $this->Document->getCurrency($document)); - $this->set('enquiry', $this->Document->getEnquiry($document)); - - - - 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')); + 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'); + $this->Email->attachments = array($pdf_dir.'/'.$document['Document']['pdf_filename']); } + $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'); - 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); - } + $this->Email->subject = $enquiry['Enquiry']['title'].' '; + $this->Email->replyTo = $enquiry['User']['email']; + $this->Email->from = 'CMC Technologies - Sales '; + $this->Email->template = 'email_pdf'; + $this->Email->sendAs = 'both'; + $this->Email->charset = 'iso-8859-1'; + $this->set('enquiry', $enquiry); + $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); } - - - /** - * 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); - } - } - - - /** - * 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'; - - $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")); - - - $this->data['Invoice']['currency_id'] = 2; //All new Invoices default to AUD. - - break; - case "purchaseOrder": - - $count = $this->Document->PurchaseOrder->findCount(); - $count++; - - $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']['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; - - } - - if ($this->Document->saveAll($this->data)) { - $newid = $this->Document->id; - - $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)); - } - + 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); } - - /** - * 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; - } - - $document = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); - - $this->set('document', $document); - - $this->Document->create(); - - 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). - - $today_date = date("Y-m-d"); - $valid_until = date("Y-m-d", strtotime("+30 days")); - - $newDoc = array(); - - - $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'; - - - $newDoc['DocPage'] = $document['DocPage']; - - foreach($newDoc['DocPage'] as $index => $li) { - $newDoc['DocPage'][$index]['id'] = null; - $newDoc['DocPage'][$index]['document_id'] = null; - } - - } - - else if (!empty($document['PurchaseOrder']['id'])) { - echo "WE ARE REVISING A PO"; - } - - - else if (!empty($document['OrderAcknowledgement']['id'])) { - echo "WE ARE REVISING An ORDER ACK"; - } - - - /** 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; - } - } - - - $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)); - } - - } - - - function ajax_edit($id = null) { - $this->layout = 'ajax'; - - 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($this->data)) { - echo 'SUCCESS'; - } else { - echo 'FAILURE'; - } - } - else { - echo 'FAILURE'; - } - } - - - /** - * - * 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 - - $this->Document->OrderAcknowledgement->Enquiry->Customer->save($customer); - - $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. - - 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; - } - } - - 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 { - - - } - - - } - - - function pdf($id = null) { -//Configure::write('debug',0); - if(!$id) { - $this->Session->setFlash(__('Invalid Document', true)); - $this->redirect(array('controller'=>'documents', 'action'=>'index')); - } - - $document = $this->Document->read(null,$id); - - $this->set('document', $document); - - $this->data = $document; - - $docType = $this->Document->getDocType($document); - $docTypeFullName = $this->Document->getDocFullName($docType); - - - - $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' - ); - } - - - $totals = $this->calculateTotals($document, $gst); - $this->set('totals',$totals); - $this->set('totalsDescText',$totalsDescText); - - $this->set('currency', $currency); - $this->set('enquiry', $enquiry); - - $this->set('principlesList', $this->Document->LineItem->Product->Principle->find('list')); - - $this->set('products', $document['LineItem']); - $this->set('states', $this->Document->Invoice->Enquiry->State->find('list')); - - -//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']))); - - $this->set('ship_via', $document['Invoice']['ship_via']); - $this->set('fob', $document['Invoice']['fob']); - - - $template_name = 'pdf_invoice'; - break; - - case "purchaseOrder": - $filename = $document['PurchaseOrder']['title']; - break; - - case "orderAck": - - $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']); - - $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('ship_via', $document['OrderAcknowledgement']['ship_via']); - $this->set('fob', $document['OrderAcknowledgement']['fob']); - $this->set('estimated_delivery', $document['OrderAcknowledgement']['estimated_delivery']); - - $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); - $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'); - $this->Email->attachments = array($pdf_dir.'/'.$document['Document']['pdf_filename']); - } - - $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 '; - $this->Email->template = 'email_pdf'; - $this->Email->sendAs = 'both'; - $this->Email->charset = 'iso-8859-1'; - $this->set('enquiry', $enquiry); - $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); - - } - - } + } } -?> \ No newline at end of file +?> diff --git a/views/enquiries/view.ctp b/views/enquiries/view.ctp index 046bacf1..fd753a4f 100755 --- a/views/enquiries/view.ctp +++ b/views/enquiries/view.ctp @@ -138,13 +138,14 @@