/** * Given a participant id/contribution id, * return contribution/fee line items * * @param int $entityId * participant/contribution id. * @param string $entity * participant/contribution. * * @param null $isQuick * @param bool $isQtyZero * @param bool $relatedEntity * * @param string $overrideWhereClause * E.g "WHERE contribution id = 7 " per the getLineItemsByContributionID wrapper. * this function precedes the convenience of the contribution id but since it does quite a bit more than just a db retrieval we need to be able to use it even * when we don't want it's entity-id magix * * @param bool $invoice * @return array * Array of line items */ public static function getLineItems($entityId, $entity = 'participant', $isQuick = NULL, $isQtyZero = TRUE, $relatedEntity = FALSE, $overrideWhereClause = '', $invoice = FALSE) { $whereClause = $fromClause = NULL; $selectClause = "\n SELECT li.id,\n li.label,\n li.contribution_id,\n li.qty,\n li.unit_price,\n li.line_total,\n li.entity_table,\n li.entity_id,\n pf.label as field_title,\n pf.html_type,\n pfv.membership_type_id,\n pfv.membership_num_terms,\n li.price_field_id,\n li.participant_count,\n li.price_field_value_id,\n li.financial_type_id,\n li.tax_amount,\n pfv.description"; $condition = "li.entity_id = %2.id AND li.entity_table = 'civicrm_%2'"; if ($relatedEntity) { $condition = "li.contribution_id = %2.id "; } $fromClause = "\n FROM civicrm_%2 as %2\n LEFT JOIN civicrm_line_item li ON ({$condition})\n LEFT JOIN civicrm_price_field_value pfv ON ( pfv.id = li.price_field_value_id )\n LEFT JOIN civicrm_price_field pf ON (pf.id = li.price_field_id )"; $whereClause = "\n WHERE %2.id = %1"; // CRM-16250 get additional participant's fee selection details only for invoice PDF (if any) if ($entity == 'participant' && $invoice) { $additionalParticipantIDs = CRM_Event_BAO_Participant::getAdditionalParticipantIds($entityId); if (!empty($additionalParticipantIDs)) { $whereClause = "WHERE %2.id IN (%1, " . implode(', ', $additionalParticipantIDs) . ")"; } } $orderByClause = " ORDER BY pf.weight, pfv.weight"; if ($isQuick) { $fromClause .= " LEFT JOIN civicrm_price_set cps on cps.id = pf.price_set_id "; $whereClause .= " and cps.is_quick_config = 0"; } if (!$isQtyZero) { $whereClause .= " and li.qty != 0"; } $lineItems = array(); if (!$entityId || !$entity || !$fromClause) { return $lineItems; } $params = array(1 => array($entityId, 'Integer'), 2 => array($entity, 'Text')); $getTaxDetails = FALSE; $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings'); $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); if ($overrideWhereClause) { $whereClause = $overrideWhereClause; } $dao = CRM_Core_DAO::executeQuery("{$selectClause} {$fromClause} {$whereClause} {$orderByClause}", $params); while ($dao->fetch()) { if (!$dao->id) { continue; } $lineItems[$dao->id] = array('qty' => (double) $dao->qty, 'label' => $dao->label, 'unit_price' => $dao->unit_price, 'line_total' => $dao->line_total, 'price_field_id' => $dao->price_field_id, 'participant_count' => $dao->participant_count, 'price_field_value_id' => $dao->price_field_value_id, 'field_title' => $dao->field_title, 'html_type' => $dao->html_type, 'description' => $dao->description, 'entity_id' => empty($overrideWhereClause) ? $entityId : $dao->entity_id, 'entity_table' => $dao->entity_table, 'contribution_id' => $dao->contribution_id, 'financial_type_id' => $dao->financial_type_id, 'membership_type_id' => $dao->membership_type_id, 'membership_num_terms' => $dao->membership_num_terms, 'tax_amount' => $dao->tax_amount); $lineItems[$dao->id]['tax_rate'] = CRM_Price_BAO_LineItem::calculateTaxRate($lineItems[$dao->id]); $lineItems[$dao->id]['subTotal'] = $lineItems[$dao->id]['qty'] * $lineItems[$dao->id]['unit_price']; if ($lineItems[$dao->id]['tax_amount'] != '') { $getTaxDetails = TRUE; } } if ($invoicing) { $taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings); $smarty = CRM_Core_Smarty::singleton(); $smarty->assign('taxTerm', $taxTerm); $smarty->assign('getTaxDetails', $getTaxDetails); } return $lineItems; }