3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2016 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
34 * @copyright CiviCRM LLC (c) 2004-2016
38 * This class provides the functionality to email a group of
41 class CRM_Contribute_Form_Task_Invoice
extends CRM_Contribute_Form_Task
{
43 * Are we operating in "single mode", i.e. updating the task of only
44 * one specific contribution?
48 public $_single = FALSE;
51 * Gives all the statues for conribution.
53 public $_contributionStatusId;
56 * Gives the HTML template of PDF Invoice.
58 public $_messageInvoice;
61 * This variable is used to assign parameters for HTML template of PDF Invoice.
63 public $_invoiceTemplate;
68 public $_selectedOutput;
71 * Build all the data structures needed to build the form.
73 public function preProcess() {
74 $id = CRM_Utils_Request
::retrieve('id', 'Positive', $this, FALSE);
76 $this->_contributionIds
= array($id);
77 $this->_componentClause
= " civicrm_contribution.id IN ( $id ) ";
78 $this->_single
= TRUE;
79 $this->assign('totalSelectedContributions', 1);
81 // set the redirection after actions
82 $contactId = CRM_Utils_Request
::retrieve('cid', 'Positive', $this, FALSE);
83 $url = CRM_Utils_System
::url('civicrm/contact/view/contribution',
84 "action=view&reset=1&id={$id}&cid={$contactId}&context=contribution&selectedChild=contribute"
87 CRM_Core_Session
::singleton()->pushUserContext($url);
93 // check that all the contribution ids have status Completed, Pending, Refunded.
94 $this->_contributionStatusId
= CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
95 $status = array('Completed', 'Pending', 'Refunded');
97 foreach ($this->_contributionStatusId
as $key => $value) {
98 if (in_array($value, $status)) {
102 $Id = implode(",", $statusId);
103 $query = "SELECT count(*) FROM civicrm_contribution WHERE contribution_status_id NOT IN ($Id) AND {$this->_componentClause}";
104 $count = CRM_Core_DAO
::singleValueQuery($query);
106 CRM_Core_Error
::statusBounce(ts('Please select only contributions with Completed, Pending, Refunded status.'));
109 // we have all the contribution ids, so now we get the contact ids
110 parent
::setContactIDs();
111 $this->assign('single', $this->_single
);
113 $qfKey = CRM_Utils_Request
::retrieve('qfKey', 'String', $this);
114 $urlParams = 'force=1';
115 if (CRM_Utils_Rule
::qfKey($qfKey)) {
116 $urlParams .= "&qfKey=$qfKey";
119 $url = CRM_Utils_System
::url('civicrm/contribute/search', $urlParams);
123 'title' => ts('Search Results'),
127 CRM_Utils_System
::appendBreadCrumb($breadCrumb);
129 $this->_selectedOutput
= CRM_Utils_Request
::retrieve('select', 'String', $this);
130 $this->assign('selectedOutput', $this->_selectedOutput
);
132 if ($this->_selectedOutput
== 'email') {
133 CRM_Utils_System
::setTitle(ts('Email Invoice'));
136 CRM_Utils_System
::setTitle(ts('Print Contribution Invoice'));
141 * Build the form object.
143 public function buildQuickForm() {
144 $session = CRM_Core_Session
::singleton();
145 $this->preventAjaxSubmit();
146 if (CRM_Core_Permission
::check('administer CiviCRM')) {
147 $this->assign('isAdmin', 1);
149 $contactID = $session->get('userID');
150 $contactEmails = CRM_Core_BAO_Email
::allEmails($contactID);
152 $fromDisplayName = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact',
153 $contactID, 'display_name'
155 foreach ($contactEmails as $emailId => $item) {
156 $email = $item['email'];
158 $emails[$emailId] = '"' . $fromDisplayName . '" <' . $email . '> ';
160 if (isset($emails[$emailId])) {
161 $emails[$emailId] .= $item['locationType'];
162 if ($item['is_primary']) {
163 $emails[$emailId] .= ' ' . ts('(preferred)');
165 $emails[$emailId] = htmlspecialchars($emails[$emailId]);
168 $fromEmailAddress = CRM_Core_OptionGroup
::values('from_email_address');
169 foreach ($fromEmailAddress as $key => $email) {
170 $fromEmailAddress[$key] = htmlspecialchars($fromEmailAddress[$key]);
172 $fromEmail = CRM_Utils_Array
::crmArrayMerge($emails, $fromEmailAddress);
173 $this->add('select', 'from_email_address', ts('From Email Address'), array('' => '- select -') +
$fromEmail);
174 if ($this->_selectedOutput
!= 'email') {
175 $this->addElement('radio', 'output', NULL, ts('Email Invoice'), 'email_invoice');
176 $this->addElement('radio', 'output', NULL, ts('PDF Invoice'), 'pdf_invoice');
177 $this->addRule('output', ts('Selection required'), 'required');
178 $this->addFormRule(array('CRM_Contribute_Form_Task_Invoice', 'formRule'));
181 $this->addRule('from_email_address', ts('From Email Address is required'), 'required');
184 $this->add('wysiwyg', 'email_comment', ts('If you would like to add personal message to email please add it here. (If sending to more then one receipient the same message will be sent to each contact.)'), array(
189 $this->addButtons(array(
192 'name' => $this->_selectedOutput
== 'email' ?
ts('Send Email') : ts('Process Invoice(s)'),
197 'name' => ts('Cancel'),
204 * Global validation rules for the form.
206 * @param array $values
209 * list of errors to be posted back to the form
211 public static function formRule($values) {
214 if ($values['output'] == 'email_invoice' && empty($values['from_email_address'])) {
215 $errors['from_email_address'] = ts("From Email Address is required");
222 * Process the form after the input has been submitted and validated.
224 public function postProcess() {
225 $params = $this->controller
->exportValues($this->_name
);
226 $this->printPDF($this->_contributionIds
, $params, $this->_contactIds
, $this);
230 * Process the PDf and email with activity and attachment on click of Print Invoices.
232 * @param array $contribIDs
234 * @param array $params
235 * Associated array of submitted values.
236 * @param array $contactIds
238 * @param CRM_Core_Form $form
241 public static function printPDF($contribIDs, &$params, $contactIds, &$form) {
242 // get all the details needed to generate a invoice
243 $messageInvoice = array();
244 $invoiceTemplate = CRM_Core_Smarty
::singleton();
245 $invoiceElements = CRM_Contribute_Form_Task_PDF
::getElements($contribIDs, $params, $contactIds);
247 // gives the status id when contribution status is 'Refunded'
248 $contributionStatusID = CRM_Contribute_PseudoConstant
::contributionStatus(NULL, 'name');
249 $refundedStatusId = CRM_Utils_Array
::key('Refunded', $contributionStatusID);
250 $cancelledStatusId = CRM_Utils_Array
::key('Cancelled', $contributionStatusID);
251 $pendingStatusId = CRM_Utils_Array
::key('Pending', $contributionStatusID);
253 // getting data from admin page
254 $prefixValue = Civi
::settings()->get('contribution_invoice_settings');
256 foreach ($invoiceElements['details'] as $contribID => $detail) {
257 $input = $ids = $objects = array();
258 if (in_array($detail['contact'], $invoiceElements['excludeContactIds'])) {
262 $input['component'] = $detail['component'];
264 $ids['contact'] = $detail['contact'];
265 $ids['contribution'] = $contribID;
266 $ids['contributionRecur'] = NULL;
267 $ids['contributionPage'] = NULL;
268 $ids['membership'] = CRM_Utils_Array
::value('membership', $detail);
269 $ids['participant'] = CRM_Utils_Array
::value('participant', $detail);
270 $ids['event'] = CRM_Utils_Array
::value('event', $detail);
272 if (!$invoiceElements['baseIPN']->validateData($input, $ids, $objects, FALSE)) {
273 CRM_Core_Error
::fatal();
276 $contribution = &$objects['contribution'];
278 $input['amount'] = $contribution->total_amount
;
279 $input['invoice_id'] = $contribution->invoice_id
;
280 $input['receive_date'] = $contribution->receive_date
;
281 $input['contribution_status_id'] = $contribution->contribution_status_id
;
282 $input['organization_name'] = $contribution->_relatedObjects
['contact']->organization_name
;
284 $objects['contribution']->receive_date
= CRM_Utils_Date
::isoToMysql($objects['contribution']->receive_date
);
286 $addressParams = array('contact_id' => $contribution->contact_id
);
287 $addressDetails = CRM_Core_BAO_Address
::getValues($addressParams);
289 // to get billing address if present
290 $billingAddress = array();
291 foreach ($addressDetails as $key => $address) {
292 if ((isset($address['is_billing']) && $address['is_billing'] == 1) && (isset($address['is_primary']) && $address['is_primary'] == 1) && $address['contact_id'] == $contribution->contact_id
) {
293 $billingAddress[$address['contact_id']] = $address;
296 elseif (($address['is_billing'] == 0 && $address['is_primary'] == 1) ||
(isset($address['is_billing']) && $address['is_billing'] == 1) && $address['contact_id'] == $contribution->contact_id
) {
297 $billingAddress[$address['contact_id']] = $address;
301 if (!empty($billingAddress[$contribution->contact_id
]['state_province_id'])) {
302 $stateProvinceAbbreviation = CRM_Core_PseudoConstant
::stateProvinceAbbreviation($billingAddress[$contribution->contact_id
]['state_province_id']);
305 $stateProvinceAbbreviation = '';
308 if ($contribution->contribution_status_id
== $refundedStatusId ||
$contribution->contribution_status_id
== $cancelledStatusId) {
309 if (is_null($contribution->creditnote_id
)) {
310 $creditNoteId = CRM_Contribute_BAO_Contribution
::createCreditNoteId();
311 CRM_Core_DAO
::setFieldValue('CRM_Contribute_DAO_Contribution', $contribution->id
, 'creditnote_id', $creditNoteId);
314 $creditNoteId = $contribution->creditnote_id
;
317 $invoiceId = CRM_Utils_Array
::value('invoice_prefix', $prefixValue) . "" . $contribution->id
;
319 //to obtain due date for PDF invoice
320 $contributionReceiveDate = date('F j,Y', strtotime(date($input['receive_date'])));
321 $invoiceDate = date("F j, Y");
322 $dueDate = date('F j ,Y', strtotime($contributionReceiveDate . "+" . $prefixValue['due_date'] . "" . $prefixValue['due_date_period']));
324 if ($input['component'] == 'contribute') {
325 $lineItem = CRM_Price_BAO_LineItem
::getLineItemsByContributionID($contribID);
328 $eid = $contribution->_relatedObjects
['participant']->id
;
329 $lineItem = CRM_Price_BAO_LineItem
::getLineItems($eid, 'participant', NULL, TRUE, FALSE, TRUE);
332 //TO DO: Need to do changes for partially paid to display amount due on PDF invoice
333 $amountDue = ($input['amount'] - $input['amount']);
335 // retreiving the subtotal and sum of same tax_rate
336 $dataArray = array();
338 foreach ($lineItem as $entity_id => $taxRate) {
339 if (isset($dataArray[(string) $taxRate['tax_rate']])) {
340 $dataArray[(string) $taxRate['tax_rate']] = $dataArray[(string) $taxRate['tax_rate']] + CRM_Utils_Array
::value('tax_amount', $taxRate);
343 $dataArray[(string) $taxRate['tax_rate']] = CRM_Utils_Array
::value('tax_amount', $taxRate);
345 $subTotal +
= CRM_Utils_Array
::value('subTotal', $taxRate);
348 // to email the invoice
349 $mailDetails = array();
351 if ($contribution->_component
== 'event') {
352 $daoName = 'CRM_Event_DAO_Event';
353 $pageId = $contribution->_relatedObjects
['event']->id
;
354 $mailElements = array(
357 'confirm_from_email',
361 CRM_Core_DAO
::commonRetrieveAll($daoName, 'id', $pageId, $mailDetails, $mailElements);
362 $values['title'] = CRM_Utils_Array
::value('title', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
363 $values['confirm_from_name'] = CRM_Utils_Array
::value('confirm_from_name', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
364 $values['confirm_from_email'] = CRM_Utils_Array
::value('confirm_from_email', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
365 $values['cc_confirm'] = CRM_Utils_Array
::value('cc_confirm', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
366 $values['bcc_confirm'] = CRM_Utils_Array
::value('bcc_confirm', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
368 $title = CRM_Utils_Array
::value('title', $mailDetails[$contribution->_relatedObjects
['event']->id
]);
370 elseif ($contribution->_component
== 'contribute') {
371 $daoName = 'CRM_Contribute_DAO_ContributionPage';
372 $pageId = $contribution->contribution_page_id
;
373 $mailElements = array(
376 'receipt_from_email',
380 CRM_Core_DAO
::commonRetrieveAll($daoName, 'id', $pageId, $mailDetails, $mailElements);
382 $values['title'] = CRM_Utils_Array
::value('title', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
383 $values['receipt_from_name'] = CRM_Utils_Array
::value('receipt_from_name', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
384 $values['receipt_from_email'] = CRM_Utils_Array
::value('receipt_from_email', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
385 $values['cc_receipt'] = CRM_Utils_Array
::value('cc_receipt', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
386 $values['bcc_receipt'] = CRM_Utils_Array
::value('bcc_receipt', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
388 $title = CRM_Utils_Array
::value('title', CRM_Utils_Array
::value($contribution->contribution_page_id
, $mailDetails));
390 $source = $contribution->source
;
392 $config = CRM_Core_Config
::singleton();
393 if (!isset($params['forPage'])) {
394 $config->doNotAttachPDFReceipt
= 1;
397 // get organization address
398 $domain = CRM_Core_BAO_Domain
::getDomain();
399 $locParams = array('contact_id' => $domain->contact_id
);
400 $locationDefaults = CRM_Core_BAO_Location
::getValues($locParams);
401 if (isset($locationDefaults['address'][1]['state_province_id'])) {
402 $stateProvinceAbbreviationDomain = CRM_Core_PseudoConstant
::stateProvinceAbbreviation($locationDefaults['address'][1]['state_province_id']);
405 $stateProvinceAbbreviationDomain = '';
407 if (isset($locationDefaults['address'][1]['country_id'])) {
408 $countryDomain = CRM_Core_PseudoConstant
::country($locationDefaults['address'][1]['country_id']);
414 // parameters to be assign for template
417 'component' => $input['component'],
418 'id' => $contribution->id
,
420 'invoice_id' => $invoiceId,
421 'resourceBase' => $config->userFrameworkResourceURL
,
422 'defaultCurrency' => $config->defaultCurrency
,
423 'amount' => $contribution->total_amount
,
424 'amountDue' => $amountDue,
425 'invoice_date' => $invoiceDate,
426 'dueDate' => $dueDate,
427 'notes' => CRM_Utils_Array
::value('notes', $prefixValue),
428 'display_name' => $contribution->_relatedObjects
['contact']->display_name
,
429 'lineItem' => $lineItem,
430 'dataArray' => $dataArray,
431 'refundedStatusId' => $refundedStatusId,
432 'pendingStatusId' => $pendingStatusId,
433 'cancelledStatusId' => $cancelledStatusId,
434 'contribution_status_id' => $contribution->contribution_status_id
,
435 'subTotal' => $subTotal,
436 'street_address' => CRM_Utils_Array
::value('street_address', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
437 'supplemental_address_1' => CRM_Utils_Array
::value('supplemental_address_1', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
438 'supplemental_address_2' => CRM_Utils_Array
::value('supplemental_address_2', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
439 'city' => CRM_Utils_Array
::value('city', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
440 'stateProvinceAbbreviation' => $stateProvinceAbbreviation,
441 'postal_code' => CRM_Utils_Array
::value('postal_code', CRM_Utils_Array
::value($contribution->contact_id
, $billingAddress)),
442 'is_pay_later' => $contribution->is_pay_later
,
443 'organization_name' => $contribution->_relatedObjects
['contact']->organization_name
,
444 'domain_organization' => $domain->name
,
445 'domain_street_address' => CRM_Utils_Array
::value('street_address', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
446 'domain_supplemental_address_1' => CRM_Utils_Array
::value('supplemental_address_1', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
447 'domain_supplemental_address_2' => CRM_Utils_Array
::value('supplemental_address_2', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
448 'domain_city' => CRM_Utils_Array
::value('city', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
449 'domain_postal_code' => CRM_Utils_Array
::value('postal_code', CRM_Utils_Array
::value('1', $locationDefaults['address'])),
450 'domain_state' => $stateProvinceAbbreviationDomain,
451 'domain_country' => $countryDomain,
452 'domain_email' => CRM_Utils_Array
::value('email', CRM_Utils_Array
::value('1', $locationDefaults['email'])),
453 'domain_phone' => CRM_Utils_Array
::value('phone', CRM_Utils_Array
::value('1', $locationDefaults['phone'])),
456 if (isset($creditNoteId)) {
457 $tplParams['creditnote_id'] = $creditNoteId;
460 $pdfFileName = "{$invoiceId}.pdf";
461 $sendTemplateParams = array(
462 'groupName' => 'msg_tpl_workflow_contribution',
463 'valueName' => 'contribution_invoice_receipt',
464 'contactId' => $contribution->contact_id
,
465 'tplParams' => $tplParams,
466 'PDFFilename' => $pdfFileName,
468 $session = CRM_Core_Session
::singleton();
469 $contactID = $session->get('userID');
470 //CRM-16319 - we dont store in userID in case the user is doing multiple
472 if (empty($contactID)) {
473 $contactID = $session->get('transaction.userID');
475 // Fix Invoice email doesnot send out when completed payment using Paypal
476 if (empty($contactID)) {
477 $contactID = current($contactIds);
479 $contactEmails = CRM_Core_BAO_Email
::allEmails($contactID);
481 $fromDisplayName = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact',
482 $contactID, 'display_name'
485 foreach ($contactEmails as $emailId => $item) {
486 $email = $item['email'];
488 $emails[$emailId] = '"' . $fromDisplayName . '" <' . $email . '> ';
491 $fromEmail = CRM_Utils_Array
::crmArrayMerge($emails, CRM_Core_OptionGroup
::values('from_email_address'));
493 // from email address
494 if (isset($params['from_email_address'])) {
495 $fromEmailAddress = CRM_Utils_Array
::value($params['from_email_address'], $fromEmail);
497 // condition to check for download PDF Invoice or email Invoice
498 if ($invoiceElements['createPdf']) {
499 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
500 if (isset($params['forPage'])) {
505 'subject' => $subject,
510 $messageInvoice[] = $mail['html'];
513 $messageInvoice[] = nl2br($mail['body']);
517 elseif ($contribution->_component
== 'contribute') {
518 $email = CRM_Contact_BAO_Contact
::getPrimaryEmail($contribution->contact_id
);
520 $sendTemplateParams['tplParams'] = array_merge($tplParams, array('email_comment' => $invoiceElements['params']['email_comment']));
521 $sendTemplateParams['from'] = $fromEmailAddress;
522 $sendTemplateParams['toEmail'] = $email;
523 $sendTemplateParams['cc'] = CRM_Utils_Array
::value('cc_receipt', $values);
524 $sendTemplateParams['bcc'] = CRM_Utils_Array
::value('bcc_receipt', $values);
526 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
527 // functions call for adding activity with attachment
528 $pdfFileName = "{$invoiceId}.pdf";
529 $fileName = self
::putFile($html, $pdfFileName);
530 self
::addActivities($subject, $contribution->contact_id
, $fileName, $params);
532 elseif ($contribution->_component
== 'event') {
533 $email = CRM_Contact_BAO_Contact
::getPrimaryEmail($contribution->contact_id
);
535 $sendTemplateParams['tplParams'] = array_merge($tplParams, array('email_comment' => $invoiceElements['params']['email_comment']));
536 $sendTemplateParams['from'] = $fromEmailAddress;
537 $sendTemplateParams['toEmail'] = $email;
538 $sendTemplateParams['cc'] = CRM_Utils_Array
::value('cc_confirm', $values);
539 $sendTemplateParams['bcc'] = CRM_Utils_Array
::value('bcc_confirm', $values);
541 list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate
::sendTemplate($sendTemplateParams);
542 // functions call for adding activity with attachment
543 $pdfFileName = "{$invoiceId}.pdf";
544 $fileName = self
::putFile($html, $pdfFileName);
545 self
::addActivities($subject, $contribution->contact_id
, $fileName, $params);
548 CRM_Core_DAO
::setFieldValue('CRM_Contribute_DAO_Contribution', $contribution->id
, 'invoice_id', $invoiceId);
549 $invoiceTemplate->clearTemplateVars();
552 if ($invoiceElements['createPdf']) {
553 if (isset($params['forPage'])) {
557 $pdfFileName = "{$invoiceId}.pdf";
558 CRM_Utils_PDF_Utils
::html2pdf($messageInvoice, $pdfFileName, FALSE, array(
563 // functions call for adding activity with attachment
564 $fileName = self
::putFile($html, $pdfFileName);
565 self
::addActivities($subject, $contactIds, $fileName, $params);
567 CRM_Utils_System
::civiExit();
571 if ($invoiceElements['suppressedEmails']) {
572 $status = ts('Email was NOT sent to %1 contacts (no email address on file, or communication preferences specify DO NOT EMAIL, or contact is deceased).', array(1 => $invoiceElements['suppressedEmails']));
573 $msgTitle = ts('Email Error');
577 $status = ts('Your mail has been sent.');
578 $msgTitle = ts('Sent');
579 $msgType = 'success';
581 CRM_Core_Session
::setStatus($status, $msgTitle, $msgType);
586 * Add activity for Email Invoice and the PDF Invoice.
588 * @param string $subject
590 * @param array $contactIds
592 * @param string $fileName
593 * Gives the location with name of the file.
594 * @param array $params
598 static public function addActivities($subject, $contactIds, $fileName, $params) {
599 $session = CRM_Core_Session
::singleton();
600 $userID = $session->get('userID');
601 $config = CRM_Core_Config
::singleton();
602 $config->doNotAttachPDFReceipt
= 1;
604 if (!empty($params['output']) && $params['output'] == 'pdf_invoice') {
605 $activityTypeID = CRM_Core_OptionGroup
::getValue('activity_type',
606 'Downloaded Invoice',
611 $activityTypeID = CRM_Core_OptionGroup
::getValue('activity_type',
617 $activityParams = array(
618 'subject' => $subject,
619 'source_contact_id' => $userID,
620 'target_contact_id' => $contactIds,
621 'activity_type_id' => $activityTypeID,
622 'activity_date_time' => date('YmdHis'),
623 'attachFile_1' => array(
625 'type' => 'application/pdf',
626 'location' => $fileName,
627 'upload_date' => date('YmdHis'),
630 CRM_Activity_BAO_Activity
::create($activityParams);
634 * Create the Invoice file in upload folder for attachment.
636 * @param string $html
637 * Content for pdf in html format.
639 * @param string $name
642 * Name of file which is in pdf format
644 static public function putFile($html, $name = 'Invoice.pdf') {
645 $options = new Options();
646 $options->set('isRemoteEnabled', TRUE);
648 $doc = new DOMPDF($options);
649 $doc->load_html($html);
651 $html = $doc->output();
652 $config = CRM_Core_Config
::singleton();
653 $fileName = $config->uploadDir
. $name;
654 file_put_contents($fileName, $html);
659 * Callback to perform action on Print Invoice button.
661 public static function getPrintPDF() {
662 $contributionId = CRM_Utils_Request
::retrieve('id', 'Positive', CRM_Core_DAO
::$_nullObject, FALSE);
663 $contributionIDs = array($contributionId);
664 $contactId = CRM_Utils_Request
::retrieve('cid', 'Positive', CRM_Core_DAO
::$_nullObject, FALSE);
665 $params = array('output' => 'pdf_invoice');
666 CRM_Contribute_Form_Task_Invoice
::printPDF($contributionIDs, $params, $contactId, CRM_Core_DAO
::$_nullObject);