From a92eb939a45cbbb022b66e0e5f2cdbb04972312c Mon Sep 17 00:00:00 2001 From: Karl Cordes Date: Fri, 12 Aug 2011 15:46:26 +1000 Subject: [PATCH] Documents controller revising quotes OK --- controllers/app_controller.php | 42 ++++-- controllers/documents_controller.php | 160 +++++++++++++++------ controllers/invoices_controller.php | 4 +- controllers/jobs_controller.php | 3 +- controllers/users_controller.php | 5 + models/invoice.php | 6 +- views/documents/pdf.ctp | 4 +- views/documents/view.ctp | 18 +-- views/elements/quote_table.ctp | 74 +++++----- views/enquiries/view.ctp | 28 ++-- views/invoices/index.ctp | 6 +- views/users/view_contact.ctp | 2 +- webroot/js/{add_job.js => view_enquiry.js} | 10 ++ 13 files changed, 217 insertions(+), 145 deletions(-) rename webroot/js/{add_job.js => view_enquiry.js} (84%) diff --git a/controllers/app_controller.php b/controllers/app_controller.php index 45c9ffac..c20bab04 100755 --- a/controllers/app_controller.php +++ b/controllers/app_controller.php @@ -8,25 +8,25 @@ class AppController extends Controller { var $helpers = array('Javascript', 'Time', 'Html', 'Form'); function beforeFilter() { - $this->set('currentuser', $this->Auth->user()); + $this->set('currentuser', $this->Auth->user()); - $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); - $this->Auth->loginRedirect = array('controller' => 'enquiries', 'action' => 'index'); - $this->Auth->allow('display'); - $this->Auth->authorize = 'controller'; + $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); + $this->Auth->loginRedirect = array('controller' => 'enquiries', 'action' => 'index'); + $this->Auth->allow('display'); + $this->Auth->authorize = 'controller'; - if($this->RequestHandler->isAjax()) { - Configure::write('debug', 0); - } + if($this->RequestHandler->isAjax()) { + Configure::write('debug', 0); + } } function isAuthorized() { - return true; + return true; } - + /** @@ -44,7 +44,7 @@ class AppController extends Controller { } - function isManager() { + function isManager() { $currentuser = $this->getCurrentUser(); if($currentuser['access_level'] == 'manager') { return true; @@ -78,9 +78,9 @@ class AppController extends Controller { - function calculateTotals($document, $gst) { + function calculateTotals($document, $gst) { $totals = array('subtotal'=>0, 'gst'=>0, 'total'=>0); - + foreach($document['LineItem'] as $lineitem) { if($lineitem['option'] == 1) { @@ -102,6 +102,22 @@ class AppController extends Controller { } + function unset_keys($array, $keys) { + foreach($keys as $key ) { + $array[$key] = null; + } + return $array; + } + + function unset_multiple_keys($array, $keys) { + foreach($array as $index => $item) { + $array[$index]['id'] = null; + $array[$index]['document_id'] = null; + $array[$index]['costing_id'] = null; + } + } + + diff --git a/controllers/documents_controller.php b/controllers/documents_controller.php index 3112e263..62cd64d6 100755 --- a/controllers/documents_controller.php +++ b/controllers/documents_controller.php @@ -38,6 +38,24 @@ class DocumentsController extends AppController { $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'; + break; + + case 'purchaseOrder': + $docTypeElement = 'document_purchase_order_view'; + break; + } + + $this->set('docTypeElement', $docTypeElement); + // $this->set('principles', $this->Document->LineItem->Product->Principle->find('list')); } @@ -72,41 +90,6 @@ class DocumentsController extends AppController { } } - /** - * Create a new Quote, along with its associated Document and the first two pages. - * @param int $id - the Enquiry ID that this quote belongs to. - */ - function newQuote($id = null) { - $enquiryid = $id; - $this->Document->create(); - - $enquiry = $this->Document->Quote->Enquiry->findById($id); - - $this->data['Document']['enquiry_id'] = $enquiryid; - - $this->data['Quote']['enquiry_id'] = $enquiryid; - $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); - $this->data['Quote']['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']['enquiry_id'] = $enquiryid; - $this->data['Document']['type'] = 'quote'; - - 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. Please, try again.', true)); - } - - - } - /** * Create a New Document @@ -115,8 +98,8 @@ class DocumentsController extends AppController { * @param $type * @param $id */ - function newDocument($type = null, $id = null) { - if(!$type|| !$id) { + function newDocument($type = null, $enquiryid = null, $jobid = 0) { + if(!$type) { $this->Session->setFlash('Invalid Doc Type or ID'); } @@ -125,8 +108,7 @@ class DocumentsController extends AppController { switch($type) { case "quote": - $enquiryid = $id; - $enquiry = $this->Document->Quote->Enquiry->findById($id); + $enquiry = $this->Document->Quote->Enquiry->findById($enquiryid); if(!$enquiry) { $this->Session->setFlash('Invalid Enquiry ID'); @@ -134,7 +116,6 @@ class DocumentsController extends AppController { return; } - $this->data['Document']['enquiry_id'] = $enquiryid; $this->data['Quote']['enquiry_id'] = $enquiryid; $number_of_revisions = $this->Document->Quote->findCount('Quote.enquiry_id ='. $enquiryid); @@ -143,14 +124,48 @@ class DocumentsController extends AppController { $this->data['Quote']['currency_id'] = 2; //All new Quotes default to AUD. $this->data['Document']['user_id']= $enquiry['Enquiry']['user_id']; - $this->data['Document']['enquiry_id'] = $enquiryid; + $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['Document']['currency_id'] = 2; //All new Invoices default to AUD. + + + + + break; case "purchaseOrder": break; case "orderAck": + + + break; } @@ -189,7 +204,40 @@ class DocumentsController extends AppController { echo "WE HAVE AN INVOICE"; } else if (!empty($document['Quote']['id'])) { - echo "WE ARE REVISING A QUOTE"; + + //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'])) { @@ -201,10 +249,30 @@ class DocumentsController extends AppController { 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); + + 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)); + } + } - - /** * Create a new Quote, along with its associated Document and the first two pages. * @param int $id - the Enquiry ID that this quote belongs to. @@ -369,8 +437,8 @@ class DocumentsController extends AppController { //If this is a quote, set the filename //@TODO FIX THIS FOR OTHER DOCTYPES - if($document['Quote']['revision'] > 0) { - $filename = $enquiry['Enquiry']['title'].'rev'.$document['Quote']['revision'].'.pdf'; + if($document['Document']['revision'] > 0) { + $filename = $enquiry['Enquiry']['title'].'_'.$document['Document']['revision'].'.pdf'; } else { $filename = $enquiry['Enquiry']['title'].'.pdf'; diff --git a/controllers/invoices_controller.php b/controllers/invoices_controller.php index fd9ba402..9c70e975 100755 --- a/controllers/invoices_controller.php +++ b/controllers/invoices_controller.php @@ -85,7 +85,7 @@ class InvoicesController extends AppController { } - function edit($id = null) { + /* function edit($id = null) { if (!$id && empty($this->data)) { $this->Session->setFlash(__('Invalid Invoice', true)); $this->redirect(array('action'=>'index')); @@ -107,7 +107,7 @@ class InvoicesController extends AppController { $users = $this->Invoice->User->find('list'); $jobs = $this->Invoice->Job->find('list', array('conditions'=>array('Job.enquiry_id'=>$invoice['Invoice']['enquiry_id']))); $this->set(compact('users', 'jobs')); - } + }*/ /*function delete($id = null) { if (!$id) { diff --git a/controllers/jobs_controller.php b/controllers/jobs_controller.php index acaf44e0..a28e067d 100755 --- a/controllers/jobs_controller.php +++ b/controllers/jobs_controller.php @@ -228,7 +228,7 @@ class JobsController extends AppController { $this->set('gst_options', $this->gst_options()); $this->set('totals', $this->getTotals($jobs)); - print_r($totals); + // print_r($totals); //print_r($jobs); } @@ -558,6 +558,7 @@ class JobsController extends AppController { $this->data['Job']['customer_id'] = $enquiry['Enquiry']['customer_id']; $this->data['Job']['contact_id'] = $enquiry['Enquiry']['contact_id']; $this->data['Job']['enquiry_id'] = $enquiry['Enquiry']['id']; + $this->data['Job']['date_order_received'] = date('Y-m-d'); if ($this->Job->save($this->data)) { echo "SUCCESS"; diff --git a/controllers/users_controller.php b/controllers/users_controller.php index 3ea4990d..cbde9c6c 100755 --- a/controllers/users_controller.php +++ b/controllers/users_controller.php @@ -95,6 +95,11 @@ class UsersController extends AppController { $this->set('emails', $emails); / */ + /** $this->render() is a better approach than I used in View Document. Keeps the views out of Elements and in the right directory. + * + Will refactor at some point in the future. Maybe. + * + */ switch ($user['User']['type']) { case 'contact': diff --git a/models/invoice.php b/models/invoice.php index 6b5fb867..c92f33b2 100755 --- a/models/invoice.php +++ b/models/invoice.php @@ -19,11 +19,7 @@ class Invoice extends AppModel { 'Enquiry' => array( 'className' => 'Enquiry', 'foreignKey' => 'enquiry_id', - 'counterCache'=>true - ), - 'User' => array( - 'className' => 'User', - 'foreignKey' => 'user_id', + 'counterCache'=> true ), 'Customer' => array( 'className' => 'Customer', diff --git a/views/documents/pdf.ctp b/views/documents/pdf.ctp index 4368b071..58ba8950 100755 --- a/views/documents/pdf.ctp +++ b/views/documents/pdf.ctp @@ -28,8 +28,8 @@ $your_reference = 'Enquiry on '.date('j M Y'); $issue_date = $document['Quote']['date_issued']; $pdfdoc->docRef = $enquiryNumber; -if($document['Quote']['revision'] > 0) { - $enquiryNumber = $enquiryNumber.'.'.$document['Quote']['revision']; +if($document['Document']['revision'] > 0) { + $enquiryNumber = $enquiryNumber.'.'.$document['Document']['revision']; } diff --git a/views/documents/view.ctp b/views/documents/view.ctp index e135d5d9..80babe80 100755 --- a/views/documents/view.ctp +++ b/views/documents/view.ctp @@ -6,7 +6,8 @@ echo $javascript->link('document_add_edit'); ?> -

: link($enquiry['Enquiry']['title'], array('controller'=>'enquiries','action'=>'view',$enquiry['Enquiry']['id']));?> : link($enquiry['Enquiry']['title'], array('controller'=>'enquiries','action'=>'view',$enquiry['Enquiry']['id']));?> + 0) { echo "Revision {$document['Document']['revision']} "; } @@ -18,20 +19,7 @@ echo $javascript->link('document_add_edit'); element('pdf_created_message'); ?> element('document_quote_view'); - break; - case 'invoice': - echo $this->element('document_invoice_view'); - break; - - case 'purchaseOrder': - echo 'Purchase OOOOORDER!!'; - - break; -} +echo $this->element($docTypeElement); ?> diff --git a/views/elements/quote_table.ctp b/views/elements/quote_table.ctp index 29c88224..b3228fec 100755 --- a/views/elements/quote_table.ctp +++ b/views/elements/quote_table.ctp @@ -1,45 +1,43 @@ - - - - - - + +
+ + + + - - + + - > - - - - - + if ($i % 2 == 0) { + $class = ' class="altrow"'; + } + if($i == 0) { + $class = ' class="mostrecent"'; + } + $i++; + ?> + > + + + + + -
nice($quote['Quote']['created']);?> - - link(__('View', true), array('controller'=> 'documents', 'action'=>'view', $quote['Quote']['document_id'])); ?> - link(__('Revise', true), array('controller'=>'documents', 'action'=>'revise', $quote['Quote']['document_id'])); - ?> + $i = 0; + foreach ($quotes as $quote): + $class = null; - -
nice($quote['Quote']['created']);?> + + link(__('View', true), array('controller'=> 'documents', 'action'=>'view', $quote['Quote']['document_id'])); ?> + link(__('Revise', true), array('controller'=>'documents', 'action'=>'revise', $quote['Quote']['document_id'])); + ?> + + +
+ -
-
    -
  • link(__('New Quote', true), array('controller'=> 'documents', 'action'=>'newDocument/quote/'.$enquiry['Enquiry']['id']));?>
  • -
-
+
+ +
diff --git a/views/enquiries/view.ctp b/views/enquiries/view.ctp index a748eb50..29b6addb 100755 --- a/views/enquiries/view.ctp +++ b/views/enquiries/view.ctp @@ -146,7 +146,7 @@ }?>

- + element('quote_table', $quotes); ?> @@ -155,7 +155,7 @@