Exemple #1
0
 /**
  * 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;
 }