2010-07-07 23:18:04 -07:00
< ? php
class DocumentsController extends AppController {
2012-11-16 19:36:36 -08:00
var $name = 'Documents' ;
var $helpers = array ( 'Html' , 'Form' , 'Number' , 'Decimal' );
2010-07-07 23:18:04 -07:00
2011-08-08 23:33:21 -07:00
2012-11-16 19:36:36 -08:00
var $paginate = array (
'contain' => false ,
'limit' => 200 ,
'order' => array ( 'Document.id' => 'desc' )
);
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
var $components = array ( 'Email' );
2010-07-07 23:18:04 -07:00
2012-11-16 19:36:36 -08:00
function index () {
$this -> Document -> recursive = 0 ;
$this -> set ( 'documents' , $this -> paginate ());
2011-10-23 20:20:07 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'users' , $this -> Document -> User -> getUsersList ());
}
2010-07-07 23:18:04 -07:00
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' ;
}
2011-08-09 01:54:10 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'docTypeElement' , $docTypeElement );
2011-08-09 01:54:10 -07:00
2012-11-16 19:36:36 -08:00
// $this->set('principles', $this->Document->LineItem->Product->Principle->find('list'));
}
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
function getProducts ( $principleID = null ) {
$this -> layout = 'ajax' ;
2011-08-11 22:46:26 -07:00
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' );
2010-07-07 23:18:04 -07:00
}
2012-11-16 19:36:36 -08:00
$this -> Document -> create ();
2010-07-07 23:18:04 -07:00
2012-11-16 19:36:36 -08:00
switch ( $type ) {
case " quote " :
2011-08-11 00:30:03 -07:00
2012-11-16 19:36:36 -08:00
$enquiry = $this -> Document -> Quote -> Enquiry -> findById ( $enquiryid );
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
if ( ! $enquiry ) {
$this -> Session -> setFlash ( 'Invalid Enquiry ID' );
$this -> redirect ( array ( 'action' => 'index' ));
return ;
}
2011-08-11 22:46:26 -07:00
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.
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$this -> data [ 'Document' ][ 'user_id' ] = $enquiry [ 'Enquiry' ][ 'user_id' ];
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$this -> data [ 'Document' ][ 'type' ] = 'quote' ;
break ;
case " invoice " :
2011-08-11 22:46:26 -07:00
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.
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$number_of_invoices = $this -> Document -> Invoice -> findCount ();
2011-08-11 22:46:26 -07:00
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 ;
}
2011-08-11 22:46:26 -07:00
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' ];
2011-08-14 23:04:38 -07:00
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' ;
2011-08-11 22:46:26 -07:00
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 " ));
2011-10-23 20:20:07 -07:00
2012-11-16 19:36:36 -08:00
$this -> data [ 'Invoice' ][ 'currency_id' ] = 2 ; //All new Invoices default to AUD.
2011-08-11 00:30:03 -07:00
2012-11-16 19:36:36 -08:00
break ;
case " purchaseOrder " :
2011-08-11 00:30:03 -07:00
2012-11-16 19:36:36 -08:00
$count = $this -> Document -> PurchaseOrder -> findCount ();
$count ++ ;
2011-08-11 00:30:03 -07:00
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' );
2011-08-11 00:30:03 -07:00
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 ;
2011-08-11 00:30:03 -07:00
}
2012-11-16 19:36:36 -08:00
if ( $this -> Document -> saveAll ( $this -> data )) {
$newid = $this -> Document -> id ;
2011-08-11 00:30:03 -07:00
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 ));
}
2011-09-01 00:42:32 -07:00
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
}
2011-08-11 22:46:26 -07: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 >
*/
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
function revise ( $id = null ) {
if ( ! $id ) {
$this -> Session -> setFlash ( 'Invalid Document ID' );
return ;
}
2011-08-14 23:04:38 -07:00
2012-11-16 19:36:36 -08:00
$document = $this -> Document -> find ( 'first' , array ( 'conditions' => array ( 'Document.id' => $id )));
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'document' , $document );
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$this -> Document -> create ();
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
if ( ! empty ( $document [ 'Invoice' ][ 'id' ])) {
echo " WE HAVE AN INVOICE " ;
}
else if ( ! empty ( $document [ 'Quote' ][ 'id' ])) {
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
//First setup the Date and default valid until date. (30 days from today).
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$today_date = date ( " Y-m-d " );
$valid_until = date ( " Y-m-d " , strtotime ( " +30 days " ));
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$newDoc = array ();
2011-08-11 00:30:03 -07:00
2012-11-16 19:36:36 -08:00
$newDoc [ 'Quote' ] = $this -> unset_keys ( $document [ 'Quote' ], array ( 'id' , 'created' ));
2011-08-11 00:30:03 -07:00
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 ;
2011-08-11 00:30:03 -07:00
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' ;
2011-08-11 00:30:03 -07:00
2011-08-11 22:46:26 -07:00
2012-11-16 19:36:36 -08:00
$newDoc [ 'DocPage' ] = $document [ 'DocPage' ];
2011-08-11 00:30:03 -07:00
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 ;
}
2011-08-11 22:46:26 -07:00
}
2010-07-07 23:18:04 -07:00
2012-11-16 19:36:36 -08:00
else if ( ! empty ( $document [ 'PurchaseOrder' ][ 'id' ])) {
echo " WE ARE REVISING A PO " ;
2010-07-07 23:18:04 -07:00
}
2011-09-01 00:42:32 -07:00
2012-11-16 19:36:36 -08:00
else if ( ! empty ( $document [ 'OrderAcknowledgement' ][ 'id' ])) {
echo " WE ARE REVISING An ORDER ACK " ;
}
2011-09-09 02:23:54 -07:00
2011-09-01 00:42:32 -07:00
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 ;
}
}
2011-09-01 00:42:32 -07:00
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 ));
2011-09-01 00:42:32 -07:00
}
2012-11-16 19:36:36 -08:00
}
2011-05-24 02:11:07 -07:00
2011-09-04 18:43:21 -07:00
2012-11-16 19:36:36 -08:00
function ajax_edit ( $id = null ) {
$this -> layout = 'ajax' ;
2011-09-04 18:43:21 -07:00
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 ));
2011-09-08 18:28:29 -07:00
2011-09-04 18:43:21 -07:00
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 );
}
2011-09-04 18:43:21 -07:00
}
2012-11-16 19:36:36 -08:00
}
2011-09-04 18:43:21 -07:00
2011-05-24 02:11:07 -07: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 {
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
}
2011-08-08 23:33:21 -07:00
2012-11-16 19:36:36 -08:00
}
2011-05-24 02:11:07 -07: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' ));
}
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$document = $this -> Document -> read ( null , $id );
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'document' , $document );
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$this -> data = $document ;
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$docType = $this -> Document -> getDocType ( $document );
$docTypeFullName = $this -> Document -> getDocFullName ( $docType );
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$currency = $this -> Document -> getCurrency ( $document );
$enquiry = $this -> Document -> getEnquiry ( $document );
2011-05-24 02:11:07 -07:00
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' ]);
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$gst = $enquiry [ 'Enquiry' ][ 'gst' ];
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'gst' , $gst );
2011-05-24 02:11:07 -07:00
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'
);
}
2011-08-14 23:04:38 -07:00
2011-08-29 03:07:32 -07:00
2012-11-16 19:36:36 -08:00
$totals = $this -> calculateTotals ( $document , $gst );
$this -> set ( 'totals' , $totals );
$this -> set ( 'totalsDescText' , $totalsDescText );
2011-08-29 03:07:32 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'currency' , $currency );
$this -> set ( 'enquiry' , $enquiry );
2011-08-29 03:07:32 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'principlesList' , $this -> Document -> LineItem -> Product -> Principle -> find ( 'list' ));
2011-08-14 23:04:38 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'products' , $document [ 'LineItem' ]);
$this -> set ( 'states' , $this -> Document -> Invoice -> Enquiry -> State -> find ( 'list' ));
2011-08-14 23:04:38 -07:00
2011-08-29 03:07:32 -07:00
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 ;
2011-08-29 03:07:32 -07:00
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' ])));
2011-08-29 03:07:32 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'ship_via' , $document [ 'Invoice' ][ 'ship_via' ]);
$this -> set ( 'fob' , $document [ 'Invoice' ][ 'fob' ]);
2011-08-29 03:07:32 -07:00
2012-11-16 19:36:36 -08:00
$template_name = 'pdf_invoice' ;
break ;
2011-09-01 00:42:32 -07:00
2012-11-16 19:36:36 -08:00
case " purchaseOrder " :
$filename = $document [ 'PurchaseOrder' ][ 'title' ];
break ;
2011-08-14 23:04:38 -07:00
2012-11-16 19:36:36 -08:00
case " orderAck " :
2011-08-08 23:33:21 -07:00
2012-11-16 19:36:36 -08:00
$job = $this -> Document -> OrderAcknowledgement -> Job -> find ( 'first' , array ( 'conditions' => array ( 'Job.id' => $document [ 'OrderAcknowledgement' ][ 'job_id' ])));
2011-08-08 23:33:21 -07:00
2012-11-16 19:36:36 -08:00
$filename = $job [ 'Job' ][ 'title' ] . '_OrderAcknowledgement' ;
$this -> set ( 'docTitle' , $job [ 'Job' ][ 'title' ]);
2011-08-08 23:33:21 -07:00
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' ])));
2011-05-24 02:11:07 -07:00
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' ]);
2011-05-24 02:11:07 -07:00
2012-11-16 19:36:36 -08:00
$template_name = 'pdf_orderack' ;
break ;
2011-08-15 17:36:48 -07:00
2011-05-24 02:11:07 -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' ;
}
2011-08-11 00:30:03 -07:00
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
}
2010-07-07 23:18:04 -07:00
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
$colWidths = array (
'item' => '7%' ,
'qty' => '7%' ,
'desc' => '56%' ,
'unit' => '15%' ,
'total' => '15%'
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
);
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
$this -> set ( 'colWidths' , $colWidths );
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
$this -> render ( $template_name );
}
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
//Called via AJAX to generate Quotation First Pages.
function generateFirstPage ( $id = null ) {
$this -> layout = 'ajax' ;
2011-09-17 02:33:17 -07:00
2012-11-16 19:36:36 -08:00
if ( ! $id ) {
return ;
}
2011-09-17 02:33:17 -07:00
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 -> replyTo = $enquiry [ 'User' ][ 'email' ];
$this -> Email -> from = 'CMC Technologies - Sales <sales@cmctechnologies.com.au>' ;
2012-12-17 03:50:19 -08:00
$docType = $this -> Document -> getDocType ( $document );
2016-04-30 19:46:16 -07:00
$template = $docType . '_email' ;
2016-04-30 20:14:01 -07:00
$subject = $enquiry [ 'Enquiry' ][ 'title' ] . ' ' ;
2016-04-30 19:46:16 -07:00
2012-12-17 04:48:53 -08:00
switch ( $docType ) {
case 'quote' :
2016-04-30 20:20:44 -07:00
$subject .= " Quotation " ;
2012-12-17 04:48:53 -08:00
break ;
case 'invoice' :
2016-04-30 20:14:01 -07:00
$subject .= " Invoice "
2012-12-17 04:48:53 -08:00
$this -> set ( 'invoice' , $this -> Document -> Invoice -> find ( 'first' , array ( 'conditions' => array ( 'Invoice.id' => $document [ 'Invoice' ][ 'id' ]))));
break ;
case 'purchaseOrder' :
2016-04-30 20:20:44 -07:00
$subject .= " Purchase Order " ;
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' :
2016-04-30 20:20:44 -07:00
$subject .= " Order Acknowledgement " ;
2012-12-17 04:48:53 -08:00
$this -> set ( 'job' , $this -> Document -> OrderAcknowledgement -> Job -> find ( 'first' , array ( 'conditions' => array ( 'Job.id' => $document [ 'OrderAcknowledgement' ][ 'job_id' ]))));
2016-04-30 19:46:16 -07:00
if ( $document [ 'OrderAcknowledgement' ][ 'signature_required' ]) {
$template = 'OrderAck_email_signature_required' ;
}
2012-12-17 04:48:53 -08:00
}
2012-12-17 03:50:19 -08:00
$this -> Email -> template = $template ;
2016-04-30 20:14:01 -07:00
$this -> Email -> subject = $subject ;
2012-12-17 03:50:19 -08:00
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 );
2011-09-17 02:33:17 -07:00
}
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
}
}
2011-09-17 02:33:17 -07:00
2011-09-17 00:02:07 -07:00
2011-09-09 02:23:54 -07:00
2011-08-08 23:33:21 -07:00
2010-07-07 23:18:04 -07:00
}
2012-11-16 19:36:36 -08:00
?>