X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FPrice%2FBAO%2FLineItem.php;h=9dad065dfc2dd2bd424ae4f8af0071218e581889;hb=03b412ae5b8d7047f8e378038a32fe731b6e7fb0;hp=1a279543ff7abb8f7dd3fe961637780736391a2c;hpb=ac30252393b3b9d8162994f59bb63e2b89ddacdc;p=civicrm-core.git diff --git a/CRM/Price/BAO/LineItem.php b/CRM/Price/BAO/LineItem.php index 1a279543ff..9dad065dfc 100644 --- a/CRM/Price/BAO/LineItem.php +++ b/CRM/Price/BAO/LineItem.php @@ -95,9 +95,9 @@ class CRM_Price_BAO_LineItem extends CRM_Price_DAO_LineItem { static function getLineTotal($entityId, $entityTable) { $sqlLineItemTotal = "SELECT SUM(li.line_total) FROM civicrm_line_item li -INNER JOIN civicrm_participant_payment pp ON ( li.entity_id = pp.participant_id -AND li.entity_table = '{$entityTable}' -AND li.entity_id = {$entityId})"; +WHERE li.entity_table = '{$entityTable}' +AND li.entity_id = {$entityId} +"; $lineItemTotal = CRM_Core_DAO::singleValueQuery($sqlLineItemTotal); return $lineItemTotal; } @@ -109,6 +109,9 @@ AND li.entity_id = {$entityId})"; * @param $entityId int participant/contribution id * @param $entity string participant/contribution. * + * @param null $isQuick + * @param bool $isQtyZero + * * @return array of line items */ static function getLineItems($entityId, $entity = 'participant', $isQuick = NULL , $isQtyZero = TRUE) { @@ -127,6 +130,7 @@ AND li.entity_id = {$entityId})"; li.participant_count, li.price_field_value_id, li.financial_type_id, + li.tax_amount, pfv.description"; $fromClause = " @@ -158,6 +162,9 @@ AND li.entity_id = {$entityId})"; ); $dao = CRM_Core_DAO::executeQuery("$selectClause $fromClause $whereClause", $params); + $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); while ($dao->fetch()) { if (!$dao->id) { continue; @@ -177,7 +184,19 @@ AND li.entity_id = {$entityId})"; '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; } @@ -257,6 +276,7 @@ AND li.entity_id = {$entityId})"; * @param int $entityId * @param int $entityTable * + * @return bool * @access public * @static */ @@ -276,12 +296,16 @@ AND li.entity_id = {$entityId})"; /** * Function to process price set and line items. - * @param int $contributionId contribution id + * + * @param $entityId * @param array $lineItem line item array * @param object $contributionDetails - * @param decimal $initAmount amount * @param string $entityTable entity table * + * @param bool $update + * + * @internal param int $contributionId contribution id + * @internal param \decimal $initAmount amount * @access public * @return void * @static @@ -309,6 +333,9 @@ AND li.entity_id = {$entityId})"; $lineItems = CRM_Price_BAO_LineItem::create($line); if (!$update && $contributionDetails) { CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails); + if (isset($contributionDetails->tax_trxn_id) && !empty($contributionDetails->tax_trxn_id) && isset($line['tax_amount'])) { + CRM_Financial_BAO_FinancialItem::add($lineItems, $contributionDetails, TRUE); + } } } } @@ -410,4 +437,24 @@ AND li.entity_id = {$entityId})"; } } } + + /** + * Calculate tax rate in percentage + * + * @param $lineItemId an assoc array of lineItem + * + * @return tax rate + * + * @access public + * @static + */ + public static function calculateTaxRate($lineItemId) { + if ($lineItemId['html_type'] == 'Text') { + $tax = (($lineItemId['line_total'] - ($lineItemId['unit_price'] * $lineItemId['qty'])))/($lineItemId['unit_price'] * $lineItemId['qty'])*100; + } + else { + $tax = (($lineItemId['line_total'] - $lineItemId['unit_price'])/$lineItemId['unit_price']) * 100; + } + return $tax; + } }