From 044310acee1c8f8403305630f38df668379f4894 Mon Sep 17 00:00:00 2001 From: Karl Cordes Date: Thu, 1 Sep 2011 17:42:32 +1000 Subject: [PATCH] Can now convert Quote to new Job and Order Ack --- controllers/documents_controller.php | 98 +++++++++++++++++++++-- controllers/enquiries_controller.php | 2 +- controllers/jobs_controller.php | 25 ++---- models/enquiry.php | 2 +- models/job.php | 47 ++++++++++- models/product.php | 1 + views/elements/document_orderack_view.ctp | 2 +- views/elements/document_quote_view.ctp | 13 +++ views/elements/invoice_table.ctp | 4 - views/enquiries/view.ctp | 34 +++++--- webroot/css/quotenik.css | 4 + webroot/js/document_add_edit.js | 66 ++++++++++++--- 12 files changed, 241 insertions(+), 57 deletions(-) diff --git a/controllers/documents_controller.php b/controllers/documents_controller.php index 498b8657..58808d04 100755 --- a/controllers/documents_controller.php +++ b/controllers/documents_controller.php @@ -170,7 +170,6 @@ class DocumentsController extends AppController { break; case "orderAck": - $enquiry = $this->Document->OrderAcknowledgement->Enquiry->read(null, $enquiryid); $this->data['OrderAcknowledgement']['job_id'] = $jobid; $this->data['OrderAcknowledgement']['enquiry_id'] = $enquiryid; @@ -178,7 +177,6 @@ class DocumentsController extends AppController { $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; } @@ -213,6 +211,8 @@ class DocumentsController extends AppController { $this->set('document', $document); + $this->Document->create(); + if(!empty($document['Invoice']['id'])) { echo "WE HAVE AN INVOICE"; } @@ -273,11 +273,12 @@ class DocumentsController extends AppController { } } - $this->set('newDoc', $newDoc); + $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 { @@ -310,7 +311,93 @@ class DocumentsController extends AppController { } } - + + /** + * + * 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 + * + * @param $id + */ + function convert_to_oa($id = null) { + //$this->layout = 'ajax'; + if (!$id) { + echo 'Invalid Document ID'; + } + else { + + + $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); + + + + $job = $this->Document->OrderAcknowledgement->Job->newJob($enquiry); //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'; + + + + /** 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); + } + + + + + + + + + } + + } + function pdf($id = null) { //Configure::write('debug',0); @@ -414,6 +501,7 @@ class DocumentsController extends AppController { $template_name = 'pdf_orderack'; break; + } if($document['Document']['revision'] > 0) { diff --git a/controllers/enquiries_controller.php b/controllers/enquiries_controller.php index d21a61c6..110cb03f 100755 --- a/controllers/enquiries_controller.php +++ b/controllers/enquiries_controller.php @@ -63,7 +63,7 @@ class EnquiriesController extends AppController { $this->set('principle_emails', $this->Enquiry->Principle->PrincipleContact->findAllByPrincipleId($enquiry['Enquiry']['principle_id'])); $this->set('jobs', $this->Enquiry->Job->find('all', array('conditions'=>array('Job.enquiry_id'=>$id)))); - + $this->set('order_acknowledgements', $this->Enquiry->OrderAcknowledgement->find('all', array('conditions'=>array('OrderAcknowledgement.enquiry_id'=>$id)))); if($enquiry['Enquiry']['billing_address_id'] != 0) { $this->set('billingaddress', $this->Enquiry->BillingAddress->findById($enquiry['Enquiry']['billing_address_id'])); diff --git a/controllers/jobs_controller.php b/controllers/jobs_controller.php index a28e067d..86ae7b8e 100755 --- a/controllers/jobs_controller.php +++ b/controllers/jobs_controller.php @@ -541,26 +541,10 @@ class JobsController extends AppController { } else { - $this->Job->create(); - - $job_offset = 6141; - - $number_of_jobs = $this->Job->findCount(); - $new_job_number = $job_offset + $number_of_jobs; - - $enquiry = $this->Job->Enquiry->findById($enquiryID); - $monthYearShort = strtoupper(date("My")); - - $jobLetter = $enquiry['State']['enqform']; - - $this->data['Job']['title'] = $monthYearShort.$jobLetter."J".$new_job_number; - $this->data['Job']['state_id'] = $enquiry['Enquiry']['state_id']; - $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)) { + $enquiry = $this->Job->Enquiry->find('first', array('conditions'=>array('Enquiry.id'=>$enquiryID))); + $result = $this->Job->newJob($enquiry); + + if (is_array($result)) { echo "SUCCESS"; } else { @@ -569,6 +553,7 @@ class JobsController extends AppController { } } + function __isNotEmptyDate($date) { if($date == "0000-00-00") { return true; diff --git a/models/enquiry.php b/models/enquiry.php index 6ac82308..82fe0772 100755 --- a/models/enquiry.php +++ b/models/enquiry.php @@ -193,6 +193,6 @@ class Enquiry extends AppModel { ); - + } ?> diff --git a/models/job.php b/models/job.php index 0bb050ef..4d6621a1 100755 --- a/models/job.php +++ b/models/job.php @@ -3,13 +3,13 @@ class Job extends AppModel { var $name = 'Job'; - + var $validate = array( 'title' => array('notempty'), 'enquiry_id' => array('numeric'), - /* 'date_order_received' => array('date'), + /* 'date_order_received' => array('date'), 'domestic_freight_paid_by' => array('notempty'), 'sale_category' => array('notempty'), @@ -36,7 +36,7 @@ class Job extends AppModel { 'foreignKey' => 'currency_id' ), - 'Customer' => array( + 'Customer' => array( 'className' => 'Customer', 'foreignKey' => 'customer_id' ) @@ -59,6 +59,45 @@ class Job extends AppModel { ) ); - + var $hasMany = array( + 'OrderAcknowledgement' => array( + 'className' => 'OrderAcknowledgement', + 'foreign_key' => 'job_id' + ) + ); + + + function newJob($enquiry) { + + $this->create(); + + $job_offset = 6141; + + $number_of_jobs = $this->findCount(); + $new_job_number = $job_offset + $number_of_jobs; + + $monthYearShort = strtoupper(date("My")); + + $jobLetter = $enquiry['State']['enqform']; + + $newJob = array(); + + $newJob['Job']['title'] = $monthYearShort.$jobLetter."J".$new_job_number; + $newJob['Job']['state_id'] = $enquiry['Enquiry']['state_id']; + $newJob['Job']['customer_id'] = $enquiry['Enquiry']['customer_id']; + $newJob['Job']['contact_id'] = $enquiry['Enquiry']['contact_id']; + $newJob['Job']['enquiry_id'] = $enquiry['Enquiry']['id']; + $newJob['Job']['date_order_received'] = date('Y-m-d'); + + if ($this->save($newJob)) { + + return $this->find('first',array('conditions'=>array('Job.id'=>$this->id))); + } + else { + return false; + } + } + + } ?> \ No newline at end of file diff --git a/models/product.php b/models/product.php index 328ac482..aea77cbe 100755 --- a/models/product.php +++ b/models/product.php @@ -17,6 +17,7 @@ class Product extends AppModel { ); + } ?> diff --git a/views/elements/document_orderack_view.ctp b/views/elements/document_orderack_view.ctp index 932e426f..1034adf9 100644 --- a/views/elements/document_orderack_view.ctp +++ b/views/elements/document_orderack_view.ctp @@ -31,7 +31,7 @@ data);?> - + diff --git a/views/elements/document_quote_view.ctp b/views/elements/document_quote_view.ctp index a6ba2880..fe1652aa 100644 --- a/views/elements/document_quote_view.ctp +++ b/views/elements/document_quote_view.ctp @@ -25,6 +25,12 @@ echo $form->input('Document.id');
+ +
+

Customer placed an order for this Quote?

+ link('Convert this Enquiry to a new Job and Generate an Order Acknowledgement', '/documents/convert_to_oa/'.$document['Document']['id'], array('class'=>'actionLink'));?> +
+
input('Document.id'); + +
+ This will create a new job and an Order Acknowledgement based on this Quote
+ The Enquiry will also be marked as "Job Won - Order Placed"
+ Continue? +
+ data);?> diff --git a/views/elements/invoice_table.ctp b/views/elements/invoice_table.ctp index ed6b50ee..fedf257e 100644 --- a/views/elements/invoice_table.ctp +++ b/views/elements/invoice_table.ctp @@ -17,7 +17,6 @@ sort('paid');?> sort('payment_received_date');?> - sort('user_id');?> - - link($invoice['User']['username'], array('controller' => 'users', 'action' => 'view', $invoice['User']['id'])); ?> - link(__('View', true), array('controller'=>'invoices','action' => 'view', $invoice['Invoice']['id'])); ?> link(__('Edit', true), array('controller'=>'invoices', 'action' => 'edit', $invoice['Invoice']['id'])); ?> diff --git a/views/enquiries/view.ctp b/views/enquiries/view.ctp index 76db5c82..046bacf1 100755 --- a/views/enquiries/view.ctp +++ b/views/enquiries/view.ctp @@ -161,15 +161,12 @@ Job Number Customer Order Number - Date Order Received - Date Sheduled Ex-Works + Date Scheduled Ex-Works Date Sent to Customer Domestic Freight Paid By - Comments - - - - link(__('View', true), array('controller'=>'jobs', 'action' => 'view', $job['Job']['id'])); ?> link(__('New Invoice for this Job', true), array('controller'=>'documents', 'action' => 'newDocument/invoice/'.$job['Job']['enquiry_id'].'/'.$job['Job']['id'])); ?> @@ -245,6 +239,28 @@
+ + +