Fix empty invoice amounts when creating a new invoice #80

Merged
kzrl merged 1 commit from kcordes/54-invoice-sheet-work into master 2023-04-21 19:16:34 -07:00

View file

@ -260,6 +260,9 @@ class DocumentsController extends AppController {
if(isset($source_document_id)) { if(isset($source_document_id)) {
//This is not ideal. But nothing else is either. //This is not ideal. But nothing else is either.
$sourceDoc = $this->Document->find('first', array('conditions' => array('Document.id' => $source_document_id))); $sourceDoc = $this->Document->find('first', array('conditions' => array('Document.id' => $source_document_id)));
$totals = $this->calculateTotals($sourceDoc, $enquiry['Enquiry']['gst']);
$this->data['Invoice']['amount_invoiced'] = $totals['total'];
if($sourceDoc['Document']['type'] == 'orderAck') { if($sourceDoc['Document']['type'] == 'orderAck') {
$oa_attributes = array( $oa_attributes = array(
'ship_via', 'ship_via',
@ -824,41 +827,41 @@ ENDINSTRUCTIONS;
// Do a bunch of queries to build a subject line for PO emails. // Do a bunch of queries to build a subject line for PO emails.
function po_email_subject($document) { function po_email_subject($document) {
$id = $document['id']; $id = $document['id'];
$subject = 'CMC Technologies Purchase Order: '.$document['title']; $subject = 'CMC Technologies Purchase Order: '.$document['title'];
$q = <<<EOT $q = <<<EOT
SELECT jobs.id, title FROM jobs SELECT jobs.id, title FROM jobs
JOIN jobs_purchase_orders as jpo ON (jpo.purchase_order_id = $id AND jpo.job_id = jobs.id) JOIN jobs_purchase_orders as jpo ON (jpo.purchase_order_id = $id AND jpo.job_id = jobs.id)
EOT; EOT;
$jobs = $this->Document->query($q); $jobs = $this->Document->query($q);
if(count($jobs) <= 0) { if(count($jobs) <= 0) {
return $subject; return $subject;
} }
$job_numbers = array(); $job_numbers = array();
$job_ids = array(); $job_ids = array();
foreach($jobs as $job) { foreach($jobs as $job) {
$job_numbers[] = $job["jobs"]["title"]; $job_numbers[] = $job["jobs"]["title"];
$job_ids[] = $job["jobs"]["id"]; $job_ids[] = $job["jobs"]["id"];
} }
$job_ids_in = implode(",", $job_ids); $job_ids_in = implode(",", $job_ids);
$q = <<<EOT $q = <<<EOT
SELECT enquiries.title from enquiries join jobs on enquiries.id = jobs.enquiry_id AND jobs.id IN($job_ids_in); SELECT enquiries.title from enquiries join jobs on enquiries.id = jobs.enquiry_id AND jobs.id IN($job_ids_in);
EOT; EOT;
$enquiries = $this->Document->query($q); $enquiries = $this->Document->query($q);
$enquiry_numbers = array(); $enquiry_numbers = array();
foreach($enquiries as $enquiry) { foreach($enquiries as $enquiry) {
$enquiry_numbers[] = $enquiry["enquiries"]["title"]; $enquiry_numbers[] = $enquiry["enquiries"]["title"];
} }
$subject = $subject . ' ( ' .implode(" ", $job_numbers). ' )'; $subject = $subject . ' ( ' .implode(" ", $job_numbers). ' )';
$subject = $subject . ' ( ' .implode(" ", $enquiry_numbers) . ' )'; $subject = $subject . ' ( ' .implode(" ", $enquiry_numbers) . ' )';
return $subject; return $subject;
} }
function orderack_email_subject($document) { function orderack_email_subject($document) {
@ -952,8 +955,8 @@ EOT;
$attachment_files = array($pdf_dir.$document['Document']['pdf_filename']); $attachment_files = array($pdf_dir.$document['Document']['pdf_filename']);
foreach($document['DocumentAttachment'] as $document_attachment) { foreach($document['DocumentAttachment'] as $document_attachment) {
$attachment = $this->Document->DocumentAttachment->Attachment->read(null, $document_attachment['attachment_id']); $attachment = $this->Document->DocumentAttachment->Attachment->read(null, $document_attachment['attachment_id']);
$attachment_files[] = $attachment['Attachment']['file']; $attachment_files[] = $attachment['Attachment']['file'];
} }
$this->Email->attachments = $attachment_files; $this->Email->attachments = $attachment_files;
@ -978,35 +981,35 @@ EOT;
switch($docType) { switch($docType) {
case 'quote': case 'quote':
$subject = "Quotation: ".$enquiry['Enquiry']['title']; $subject = "Quotation: ".$enquiry['Enquiry']['title'];
break; break;
case 'invoice': case 'invoice':
$subject = $this->invoice_email_subject($document); $subject = $this->invoice_email_subject($document);
$this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id'])))); $this->set('invoice', $this->Document->Invoice->find('first', array('conditions'=>array('Invoice.id'=>$document['Invoice']['id']))));
$this->set('job', $this->Document->Invoice->Job->find('first', array('conditions'=>array('Job.id'=>$document['Invoice']['job_id'])))); $this->set('job', $this->Document->Invoice->Job->find('first', array('conditions'=>array('Job.id'=>$document['Invoice']['job_id']))));
break; break;
case 'purchaseOrder': case 'purchaseOrder':
$subject .= "Purchase Order"; $subject .= "Purchase Order";
$primary_contact = $this->Document->User->find('first', array('conditions'=>array('User.principle_id' => $document['PurchaseOrder']['principle_id'],'User.primary_contact' => 1))); $primary_contact = $this->Document->User->find('first', array('conditions'=>array('User.principle_id' => $document['PurchaseOrder']['principle_id'],'User.primary_contact' => 1)));
if(empty($primary_contact)) { if(empty($primary_contact)) {
$this->Session->setFlash(__('Unable to send. No primary Principle Contact', true)); $this->Session->setFlash(__('Unable to send. No primary Principle Contact', true));
$this->redirect(array('action'=>'view/'.$id), null, false); $this->redirect(array('action'=>'view/'.$id), null, false);
return; return;
} }
$subject = $this->po_email_subject($document['PurchaseOrder']); $subject = $this->po_email_subject($document['PurchaseOrder']);
$this->Email->to = $this->email_format($primary_contact['User']['email']); $this->Email->to = $this->email_format($primary_contact['User']['email']);
$this->Email->replyTo = null; $this->Email->replyTo = null;
$this->Email->cc = null; $this->Email->cc = null;
$this->set('job', $this->Document->PurchaseOrder->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); $this->set('job', $this->Document->PurchaseOrder->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))));
break; break;
case 'orderAck': case 'orderAck':
$subject = $this->orderack_email_subject($document); $subject = $this->orderack_email_subject($document);
$this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id'])))); $this->set('job', $this->Document->OrderAcknowledgement->Job->find('first', array('conditions'=>array('Job.id'=>$document['OrderAcknowledgement']['job_id']))));
if ($document['OrderAcknowledgement']['signature_required']) { if ($document['OrderAcknowledgement']['signature_required']) {
$template = 'orderAck_email_signature_required'; $template = 'orderAck_email_signature_required';
} }
break; break;
case 'packingList': case 'packingList':
$subject = $this->packing_list_email_subject($document); $subject = $this->packing_list_email_subject($document);