quickCleanUpFinancialEntities(); CRM_Utils_Hook::singleton()->reset(); } /** * CRM-17815 - Test due date and payment advice block in generated * invoice pdf for pending and completed contributions */ public function testInvoiceForDueDate() { $contactIds = array(); $params = array( 'output' => 'pdf_invoice', 'forPage' => 1, ); $this->_individualId = $this->individualCreate(); $contributionParams = array( 'contact_id' => $this->_individualId, 'total_amount' => 100, 'financial_type_id' => 'Donation', ); $result = $this->callAPISuccess('Contribution', 'create', $contributionParams); $contributionParams['contribution_status_id'] = 2; $contributionParams['is_pay_later'] = 1; $contribution = $this->callAPISuccess('Contribution', 'create', $contributionParams); $contribution3 = $this->callAPISuccess('Contribution', 'create', $contributionParams); $this->callAPISuccess('Payment', 'create', array('total_amount' => 8, 'contribution_id' => $contribution3['id'])); $this->callAPISuccess('Contribution', 'create', array('id' => $contribution3['id'], 'is_pay_later' => 0)); $contributionIDs = array( array($result['id']), array($contribution['id']), array($contribution3['id']), ); $contactIds[] = $this->_individualId; foreach ($contributionIDs as $contributionID) { $invoiceHTML[current($contributionID)] = CRM_Contribute_Form_Task_Invoice::printPDF($contributionID, $params, $contactIds); } $this->assertNotContains('Due Date', $invoiceHTML[$result['id']]); $this->assertNotContains('PAYMENT ADVICE', $invoiceHTML[$result['id']]); $this->assertContains('Due Date', $invoiceHTML[$contribution['id']]); $this->assertContains('PAYMENT ADVICE', $invoiceHTML[$contribution['id']]); $this->assertContains('AMOUNT DUE: $ 92.00', $invoiceHTML[$contribution3['id']]); } /** * PR 13477 - Fix incorrect display of Line Items created via API * when printing invoice (for Participants). */ public function testInvoiceForLineItems() { $this->enableTaxAndInvoicing(); $event = $this->eventCreatePaid([]); $individualOneId = $this->individualCreate(); $individualTwoId = $this->individualCreate(); $contactIds = [$individualOneId, $individualTwoId]; $priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_event', $event['id']); $priceField = $this->callAPISuccess('PriceField', 'get', ['price_set_id' => $priceSetId]); $priceFieldValues = $this->callAPISuccess('PriceFieldValue', 'get', [ 'sequential' => 1, 'price_field_id' => $priceField['id'], ]); $lineItemParams = []; foreach ($priceFieldValues['values'] as $key => $priceFieldValue) { $lineItemParams[] = [ 'line_item' => [ $priceFieldValue['id'] => [ 'price_field_id' => $priceField['id'], 'label' => $priceFieldValue['label'], 'financial_type_id' => $priceFieldValue['financial_type_id'], 'price_field_value_id' => $priceFieldValue['id'], 'qty' => 1, 'field_title' => $priceFieldValue['label'], 'unit_price' => $priceFieldValue['amount'], 'line_total' => $priceFieldValue['amount'], 'entity_table' => 'civicrm_participant', ], ], // participant params 'params' => [ 'contact_id' => $contactIds[$key], 'event_id' => $event['id'], 'status_id' => 1, 'price_set_id' => $priceSetId, 'participant_fee_amount' => $priceFieldValue['amount'], 'participant_fee_level' => $priceFieldValue['label'], ], ]; } $orderParams = [ 'contact_id' => $individualOneId, 'total_amount' => array_reduce($priceFieldValues['values'], function($total, $priceFieldValue) { $total += $priceFieldValue['amount']; return $total; }), 'financial_type_id' => $priceFieldValues['values'][0]['financial_type_id'], 'contribution_status_id' => 'Completed', 'currency' => 'USD', 'line_items' => $lineItemParams, ]; $order = $this->callAPISuccess('Order', 'create', $orderParams); $pdfParams = [ 'output' => 'pdf_invoice', 'forPage' => 1, ]; $invoiceHTML = CRM_Contribute_Form_Task_Invoice::printPDF([$order['id']], $pdfParams, [$individualOneId]); $lineItems = $this->callAPISuccess('LineItem', 'get', ['contribution_id' => $order['id']]); foreach ($lineItems['values'] as $lineItem) { $this->assertContains("$ {$lineItem['line_total']}", $invoiceHTML); } $totalAmount = $this->formatMoneyInput($order['values'][$order['id']]['total_amount']); $this->assertContains("TOTAL USD $ $totalAmount", $invoiceHTML); } }