cmc-sales/app/controllers/documents_controller.php

717 lines
23 KiB
PHP
Raw Normal View History

<?php
class DocumentsController extends AppController {
2012-11-16 19:36:36 -08:00
var $name = 'Documents';
var $helpers = array('Html', 'Form', 'Number', 'Decimal');
2012-11-16 19:36:36 -08:00
var $paginate = array(
'contain' => false,
'limit' => 200,
'order'=>array('Document.id' => 'desc')
);
2012-11-16 19:36:36 -08:00
var $components = array('Email');
2012-11-16 19:36:36 -08:00
function index() {
$this->Document->recursive = 0;
$this->set('documents', $this->paginate());
2012-11-16 19:36:36 -08:00
$this->set('users', $this->Document->User->getUsersList());
}
2012-11-16 19:36:36 -08:00
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));
2012-11-18 12:19:55 -08:00
$this->set('attachments', $this->Document->DocumentAttachment->find('all', array('conditions'=>array('document_id'=> $id))));
$this->set('principles', $this->Document->LineItem->Product->Principle->find('list'));
2012-11-16 19:36:36 -08:00
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';
}
2012-11-16 19:36:36 -08:00
$this->set('docTypeElement', $docTypeElement);
2012-11-16 19:36:36 -08:00
// $this->set('principles', $this->Document->LineItem->Product->Principle->find('list'));
}
2012-11-16 19:36:36 -08:00
function getProducts($principleID = null) {
$this->layout = 'ajax';
2012-11-16 19:36:36 -08:00
if($principleID == null) {
echo "INVALID PRINCIPLE ID";
2011-05-18 16:46:22 -07:00
}
2012-11-16 19:36:36 -08:00
else {
$products = $this->Document->LineItem->Product->find('list', array('conditions'=>array('Product.principle_id'=>$principleID)));
$this->set('products',$products);
2011-05-19 00:05:01 -07:00
}
2012-11-16 19:36:36 -08:00
}
2011-05-19 00:05:01 -07:00
2012-11-16 19:36:36 -08:00
/**
* Return a JSON object of the Product.
*/
function getProductDetails($productID = null) {
$this->layout = 'ajax';
2011-05-19 00:05:01 -07:00
2012-11-16 19:36:36 -08:00
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);
}
}
2012-11-18 12:19:55 -08:00
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)));
$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}";
2012-12-01 18:17:09 -08:00
$this->Document->DocumentAttachment->query($query);
2012-11-18 12:19:55 -08:00
2012-12-01 18:17:09 -08:00
$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 {
2012-11-18 12:19:55 -08:00
echo "FAIL";
}
}
2012-12-01 18:17:09 -08:00
}
function removeAttachments() {
$this->layout = 'ajax';
foreach($this->data as $attachment) {
$this->Document->DocumentAttachment->delete($attachment);
2012-11-18 12:19:55 -08:00
}
}
2012-11-16 19:36:36 -08:00
/**
* Create a New Document
*
*
* @param <type> $type
* @param <type> $id
*/
function newDocument($type = null, $enquiryid = null, $jobid = 0) {
if(!$type) {
$this->Session->setFlash('Invalid Doc Type or ID');
}
2012-11-16 19:36:36 -08:00
$this->Document->create();
2012-11-16 19:36:36 -08:00
switch($type) {
case "quote":
2012-11-16 19:36:36 -08:00
$enquiry = $this->Document->Quote->Enquiry->findById($enquiryid);
2012-11-16 19:36:36 -08:00
if(!$enquiry) {
$this->Session->setFlash('Invalid Enquiry ID');
$this->redirect(array('action'=>'index'));
return;
}
2012-11-16 19:36:36 -08:00
$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.
2012-11-16 19:36:36 -08:00
$this->data['Document']['user_id']= $enquiry['Enquiry']['user_id'];
2012-11-16 19:36:36 -08:00
$this->data['Document']['type'] = 'quote';
break;
case "invoice":
2012-11-16 19:36:36 -08:00
$invoice_number_offset = 4436; //What Invoice number we are up to. Starting at 4500 due to the data loss.
2012-11-16 19:36:36 -08:00
$number_of_invoices = $this->Document->Invoice->findCount();
2012-11-16 19:36:36 -08:00
$enquiry = $this->Document->Invoice->Enquiry->read(null, $enquiryid);
if(!$enquiry) {
$this->Session->setFlash('Invalid Enquiry ID');
$this->redirect(array('action'=>'index'));
return;
}
2012-11-16 19:36:36 -08:00
$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'];
2012-11-16 19:36:36 -08:00
$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';
2012-11-16 19:36:36 -08:00
$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"));
2012-11-16 19:36:36 -08:00
$this->data['Invoice']['currency_id'] = 2; //All new Invoices default to AUD.
2012-11-16 19:36:36 -08:00
break;
case "purchaseOrder":
2012-11-16 19:36:36 -08:00
$count = $this->Document->PurchaseOrder->findCount();
$count++;
2012-11-16 19:36:36 -08:00
$offset = 2060;
$count += $offset;
$newPOnumber = "CMCPO".$count;
$this->data['PurchaseOrder']['title'] = $newPOnumber;
$this->data['PurchaseOrder']['issue_date'] = date('Y-m-d');
2012-11-16 19:36:36 -08:00
$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;
}
2012-11-16 19:36:36 -08:00
if ($this->Document->saveAll($this->data)) {
$newid = $this->Document->id;
2012-11-16 19:36:36 -08:00
$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));
}
2012-11-16 19:36:36 -08:00
}
2012-11-16 19:36:36 -08:00
/**
* Revise a Document.
*
* @param int $id - the document ID we want to make a new revision of.
* @return <type>
*/
2012-11-16 19:36:36 -08:00
function revise($id = null) {
if(!$id) {
$this->Session->setFlash('Invalid Document ID');
return;
}
2012-11-16 19:36:36 -08:00
$document = $this->Document->find('first', array('conditions' => array('Document.id' => $id)));
2012-11-16 19:36:36 -08:00
$this->set('document', $document);
2012-11-16 19:36:36 -08:00
$this->Document->create();
2012-11-16 19:36:36 -08:00
if(!empty($document['Invoice']['id'])) {
echo "WE HAVE AN INVOICE";
}
else if (!empty($document['Quote']['id'])) {
2012-11-16 19:36:36 -08:00
//First setup the Date and default valid until date. (30 days from today).
2012-11-16 19:36:36 -08:00
$today_date = date("Y-m-d");
$valid_until = date("Y-m-d", strtotime("+30 days"));
2012-11-16 19:36:36 -08:00
$newDoc = array();
2012-11-16 19:36:36 -08:00
$newDoc['Quote'] = $this->unset_keys($document['Quote'], array('id','created'));
2012-11-16 19:36:36 -08:00
$newDoc['Quote']['date_issued'] = $today_date;
$newDoc['Quote']['days_valid'] = 30;
$newDoc['Quote']['valid_until'] = $valid_until;
2012-11-16 19:36:36 -08:00
$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';
2012-11-16 19:36:36 -08:00
$newDoc['DocPage'] = $document['DocPage'];
2012-11-16 19:36:36 -08:00
foreach($newDoc['DocPage'] as $index => $li) {
$newDoc['DocPage'][$index]['id'] = null;
$newDoc['DocPage'][$index]['document_id'] = null;
}
}
2012-11-16 19:36:36 -08:00
else if (!empty($document['PurchaseOrder']['id'])) {
echo "WE ARE REVISING A PO";
}
2012-11-16 19:36:36 -08:00
else if (!empty($document['OrderAcknowledgement']['id'])) {
echo "WE ARE REVISING An ORDER ACK";
}
2012-11-16 19:36:36 -08:00
/** 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;
}
}
2012-11-16 19:36:36 -08:00
$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));
}
2012-11-16 19:36:36 -08:00
}
2012-11-16 19:36:36 -08:00
function ajax_edit($id = null) {
$this->layout = 'ajax';
2012-11-16 19:36:36 -08:00
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));
2012-11-16 19:36:36 -08:00
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
2012-11-17 18:57:16 -08:00
2012-11-16 19:36:36 -08:00
$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.
2012-11-17 18:57:16 -08:00
2012-11-16 19:36:36 -08:00
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');
2012-11-17 18:57:16 -08:00
2012-11-16 19:36:36 -08:00
$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'] = '<b>'.$customer['Customer']['name'].'</b><br/>';
$newDoc['Document']['bill_to'] .= $this->Document->OrderAcknowledgement->Enquiry->formatAddress($enquiry['BillingAddress']['id'], 'BillingAddress');
}
if(isset($enquiry['ShippingAddress']['id'])) {
$newDoc['Document']['ship_to'] = '<b>'.$customer['Customer']['name'].'</b><br/>';
$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);
}
}
2012-11-16 19:36:36 -08:00
}
2012-11-16 19:36:36 -08:00
/**
* Convert an Order Acknowledgement to an Invoice.
*
* @TODO Finish this.
*
* @param <int> $id
*/
function convert_to_invoice($id = null) {
if (!$id) {
echo 'Invalid Document ID';
}
else {
2012-11-16 19:36:36 -08:00
}
2012-11-16 19:36:36 -08:00
}
2012-11-16 19:36:36 -08:00
function pdf($id = null) {
//Configure::write('debug',0);
if(!$id) {
$this->Session->setFlash(__('Invalid Document', true));
$this->redirect(array('controller'=>'documents', 'action'=>'index'));
}
2012-11-16 19:36:36 -08:00
$document = $this->Document->read(null,$id);
2012-11-16 19:36:36 -08:00
$this->set('document', $document);
2012-11-16 19:36:36 -08:00
$this->data = $document;
2012-11-16 19:36:36 -08:00
$docType = $this->Document->getDocType($document);
$docTypeFullName = $this->Document->getDocFullName($docType);
2012-11-16 19:36:36 -08:00
$currency = $this->Document->getCurrency($document);
$enquiry = $this->Document->getEnquiry($document);
2012-11-16 19:36:36 -08:00
$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']);
2012-11-16 19:36:36 -08:00
$gst = $enquiry['Enquiry']['gst'];
2012-11-16 19:36:36 -08:00
$this->set('gst', $gst);
2012-11-16 19:36:36 -08:00
if($gst == 1) {
$totalsDescText = array(
'subtotal' => 'SUBTOTAL',
'gst' => 'GST (10%)',
'total' => 'TOTAL DUE'
);
}
else {
$totalsDescText = array(
'subtotal' => 'SUBTOTAL',
'gst' => 'GST (10%)',
'total' => 'TOTAL PAYABLE'
);
}
2012-11-16 19:36:36 -08:00
$totals = $this->calculateTotals($document, $gst);
$this->set('totals',$totals);
$this->set('totalsDescText',$totalsDescText);
2012-11-16 19:36:36 -08:00
$this->set('currency', $currency);
$this->set('enquiry', $enquiry);
2012-11-16 19:36:36 -08:00
$this->set('principlesList', $this->Document->LineItem->Product->Principle->find('list'));
2012-11-16 19:36:36 -08:00
$this->set('products', $document['LineItem']);
$this->set('states', $this->Document->Invoice->Enquiry->State->find('list'));
2012-11-16 19:36:36 -08:00
//Set filename for the document.
//
switch($docType) {
case "quote":
$filename = $enquiry['Enquiry']['title'];
$template_name = 'pdf_quote';
break;
2012-11-16 19:36:36 -08:00
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'])));
2012-11-16 19:36:36 -08:00
$this->set('ship_via', $document['Invoice']['ship_via']);
$this->set('fob', $document['Invoice']['fob']);
2012-11-16 19:36:36 -08:00
$template_name = 'pdf_invoice';
break;
2012-11-16 19:36:36 -08:00
case "purchaseOrder":
$filename = $document['PurchaseOrder']['title'];
break;
2012-11-16 19:36:36 -08:00
case "orderAck":
2012-11-16 19:36:36 -08:00
$job = $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])));
2012-11-16 19:36:36 -08:00
$filename = $job['Job']['title'].'_OrderAcknowledgement';
$this->set('docTitle', $job['Job']['title']);
2012-11-16 19:36:36 -08:00
$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'])));
2012-11-16 19:36:36 -08:00
$this->set('ship_via', $document['OrderAcknowledgement']['ship_via']);
$this->set('fob', $document['OrderAcknowledgement']['fob']);
$this->set('estimated_delivery', $document['OrderAcknowledgement']['estimated_delivery']);
2012-11-16 19:36:36 -08:00
$template_name = 'pdf_orderack';
break;
2011-08-15 17:36:48 -07:00
}
2012-11-16 19:36:36 -08:00
if($document['Document']['revision'] > 0) {
$filename = $filename.'_'.$document['Document']['revision'].'.pdf';
}
else {
$filename = $filename.'.pdf';
}
2012-11-16 19:36:36 -08:00
$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;
2011-06-15 01:26:22 -07:00
}
2012-11-16 19:36:36 -08:00
$colWidths = array(
'item' => '7%',
'qty' => '7%',
'desc' => '56%',
'unit' => '15%',
'total' => '15%'
2012-11-16 19:36:36 -08:00
);
2012-11-16 19:36:36 -08:00
$this->set('colWidths',$colWidths);
2012-11-16 19:36:36 -08:00
$this->render($template_name);
}
2012-11-16 19:36:36 -08:00
//Called via AJAX to generate Quotation First Pages.
function generateFirstPage($id = null) {
$this->layout = 'ajax';
2012-11-16 19:36:36 -08:00
if(!$id) {
return;
}
2012-11-16 19:36:36 -08:00
$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);
}
2012-11-17 18:57:16 -08:00
2012-11-16 19:36:36 -08:00
/**
* Email the PDF(document + attachments) for this Document to a Recipient (Customer or Principle).
*
*
* @param <int> $id - Document ID
*/
function email_pdf($id) {
//Setup the SMTP Options
$this->Email->smtpOptions = Configure::read('smtp_settings');
$this->Email->delivery = 'smtp';
2012-12-17 04:01:19 -08:00
$document = $this->Document->read(null,$id);
2012-11-18 12:19:55 -08:00
2012-11-16 19:36:36 -08:00
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');
2012-11-18 12:19:55 -08:00
$attachment_files = array($pdf_dir.$document['Document']['pdf_filename']);
2012-12-01 18:17:09 -08:00
foreach($document['DocumentAttachment'] as $document_attachment) {
$attachment = $this->Document->DocumentAttachment->Attachment->read(null, $document_attachment['attachment_id']);
$attachment_files[] = $attachment['Attachment']['file'];
2012-11-18 12:19:55 -08:00
}
$this->Email->attachments = $attachment_files;
2012-11-16 19:36:36 -08:00
}
$enquiry = $this->Document->getEnquiry($document);
$this->Email->to = $enquiry['Contact']['email'];
//Uncomment this when going live
2012-11-18 12:19:55 -08:00
$this->Email->cc = array($enquiry['User']['email']);
2012-12-17 03:16:31 -08:00
$this->Email->bcc = array('carpis@cmctechnologies.com.au');
2012-11-16 19:36:36 -08:00
$this->Email->subject = $enquiry['Enquiry']['title'].' ';
$this->Email->replyTo = $enquiry['User']['email'];
$this->Email->from = 'CMC Technologies - Sales <sales@cmctechnologies.com.au>';
$docType = $this->Document->getDocType($document);
$template = $docType.'_email';
2012-12-17 04:48:53 -08:00
switch($docType) {
case 'quote':
break;
case 'invoice':
$this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id']))));
break;
case 'purchaseOrder':
2012-12-17 04:50:20 -08:00
$this->set('job', $this->Document->PurchaseOrder->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))));
2012-12-17 04:48:53 -08:00
break;
case 'orderAck':
$this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))));
if ($document['OrderAcknowledgement']['signature_required']) {
$template = 'OrderAck_email_signature_required';
}
2012-12-17 04:48:53 -08:00
}
$this->Email->template = $template;
2012-11-16 19:36:36 -08:00
$this->Email->sendAs = 'both';
$this->Email->charset = 'iso-8859-1';
$this->set('enquiry', $enquiry);
2012-12-17 04:27:44 -08:00
$this->set('document', $document);
2012-11-16 19:36:36 -08:00
$this->set('DocFullName', $this->Document->getDocFullName($document['Document']['type']));
if($this->Email->send()) {
$this->Session->setFlash(__('The Email has been sent', true));
2012-11-18 12:19:55 -08:00
$this->redirect(array('action'=>'view/'.$id), null, false);
}
2012-11-16 19:36:36 -08:00
else {
$this->set('smtp_errors', $this->Email->smtpError);
$this->Session->setFlash(__('The Email has NOT been sent. Something went wrong.', true));
2012-12-17 03:16:31 -08:00
$this->redirect(array('action'=>'view/'.$id), null, false);
2012-11-16 19:36:36 -08:00
}
}
}
2012-11-16 19:36:36 -08:00
?>