/** * Get the details for the selected price set. * * @param array $params * Parameters submitted to the form. * * @return array */ protected static function getPriceSetDetails($params) { $priceSetID = CRM_Utils_Array::value('price_set_id', $params); if ($priceSetID) { return CRM_Price_BAO_PriceSet::getSetDetail($priceSetID); } else { $priceSet = CRM_Price_BAO_PriceSet::getDefaultPriceSet('membership'); $priceSet = reset($priceSet); return CRM_Price_BAO_PriceSet::getSetDetail($priceSet['setID']); } }
/** * Function to build line items array. * @param int $params form values * * @param string $entityId entity id * * @param string $entityTable entity Table * * @access public * @return void * @static */ static function getLineItemArray(&$params, $entityId = NULL, $entityTable = 'contribution') { if (!$entityId) { $priceSetDetails = CRM_Price_BAO_PriceSet::getDefaultPriceSet(); foreach ($priceSetDetails as $values) { $params['line_item'][$values['setID']][$values['priceFieldID']] = array('price_field_id' => $values['priceFieldID'], 'price_field_value_id' => $values['priceFieldValueID'], 'label' => $values['label'], 'qty' => 1, 'unit_price' => $params['total_amount'], 'line_total' => $params['total_amount'], 'financial_type_id' => $params['financial_type_id']); } } else { $setID = NULL; $totalEntityId = count($entityId); foreach ($entityId as $id) { $lineItems = CRM_Price_BAO_LineItem::getLineItems($id, $entityTable); foreach ($lineItems as $key => $values) { if (!$setID && $values['price_field_id']) { $setID = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $values['price_field_id'], 'price_set_id'); $params['is_quick_config'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'is_quick_config'); } if (CRM_Utils_Array::value('is_quick_config', $params) && array_key_exists('total_amount', $params) && $totalEntityId == 1) { $values['line_total'] = $values['unit_price'] = $params['total_amount']; } $values['id'] = $key; $params['line_item'][$setID][$key] = $values; } } } }
/** * Build line items array. * @param array $params * Form values. * * @param string $entityId * Entity id. * * @param string $entityTable * Entity Table. * * @return void */ public static function getLineItemArray(&$params, $entityId = NULL, $entityTable = 'contribution', $isRelatedID = FALSE) { if (!$entityId) { $priceSetDetails = CRM_Price_BAO_PriceSet::getDefaultPriceSet($entityTable); $totalAmount = CRM_Utils_Array::value('total_amount', $params); $financialType = CRM_Utils_Array::value('financial_type_id', $params); foreach ($priceSetDetails as $values) { if ($entityTable == 'membership') { if ($isRelatedID != $values['membership_type_id']) { continue; } if (!$totalAmount) { $totalAmount = $values['amount']; } $financialType = $values['financial_type_id']; } $params['line_item'][$values['setID']][$values['priceFieldID']] = array('price_field_id' => $values['priceFieldID'], 'price_field_value_id' => $values['priceFieldValueID'], 'label' => $values['label'], 'qty' => 1, 'unit_price' => $totalAmount, 'line_total' => $totalAmount, 'financial_type_id' => $financialType, 'membership_type_id' => $values['membership_type_id']); break; } } else { $setID = NULL; $totalEntityId = count($entityId); foreach ($entityId as $id) { $lineItems = CRM_Price_BAO_LineItem::getLineItems($id, $entityTable, NULL, TRUE, $isRelatedID); foreach ($lineItems as $key => $values) { if (!$setID && $values['price_field_id']) { $setID = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $values['price_field_id'], 'price_set_id'); $params['is_quick_config'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'is_quick_config'); } if (!empty($params['is_quick_config']) && array_key_exists('total_amount', $params) && $totalEntityId == 1) { $values['line_total'] = $values['unit_price'] = $params['total_amount']; } $values['id'] = $key; $params['line_item'][$setID][$key] = $values; } } } }
/** * (Queue Task Callback) * * Find any contribution records and create corresponding line-item * records. * * @param CRM_Queue_TaskContext $ctx * @param int $startId * the first/lowest contribution ID to convert. * @param int $endId * the last/highest contribution ID to convert. * * @return bool */ public static function task_4_2_alpha1_convertContributions(CRM_Queue_TaskContext $ctx, $startId, $endId) { $upgrade = new CRM_Upgrade_Form(); $query = "\n INSERT INTO civicrm_line_item(`entity_table` ,`entity_id` ,`price_field_id` ,`label` , `qty` ,`unit_price` ,`line_total` ,`participant_count` ,`price_field_value_id`)\n SELECT 'civicrm_contribution',cc.id, cpf.id as price_field_id, cpfv.label, 1, cc.total_amount, cc.total_amount line_total, 0, cpfv.id as price_field_value\n FROM civicrm_membership_payment cmp\n LEFT JOIN `civicrm_contribution` cc ON cc.id = cmp.contribution_id\n LEFT JOIN civicrm_line_item cli ON cc.id=cli.entity_id and cli.entity_table = 'civicrm_contribution'\n LEFT JOIN civicrm_membership cm ON cm.id=cmp.membership_id\n LEFT JOIN civicrm_membership_type cmt ON cmt.id = cm.membership_type_id\n LEFT JOIN civicrm_price_field cpf ON BINARY cpf.name = cmt.member_of_contact_id\n LEFT JOIN civicrm_price_field_value cpfv ON cpfv.membership_type_id = cm.membership_type_id AND cpf.id = cpfv.price_field_id\n WHERE (cc.id BETWEEN %1 AND %2) AND cli.entity_id IS NULL ;\n "; $sqlParams = array(1 => array($startId, 'Integer'), 2 => array($endId, 'Integer')); CRM_Core_DAO::executeQuery($query, $sqlParams); // create lineitems for contribution done for membership $sql = "\nSELECT cc.id, cmp.membership_id, cpse.price_set_id, cc.total_amount\nFROM civicrm_contribution cc\nLEFT JOIN civicrm_line_item cli ON cc.id=cli.entity_id AND cli.entity_table = 'civicrm_contribution'\nLEFT JOIN civicrm_membership_payment cmp ON cc.id = cmp.contribution_id\nLEFT JOIN civicrm_participant_payment cpp ON cc.id = cpp.contribution_id\nLEFT JOIN civicrm_price_set_entity cpse on cpse.entity_table = 'civicrm_contribution_page' AND cpse.entity_id = cc.contribution_page_id\nWHERE (cc.id BETWEEN %1 AND %2)\nAND cli.entity_id IS NULL AND cc.contribution_page_id IS NOT NULL AND cpp.contribution_id IS NULL\nGROUP BY cc.id\n"; $result = CRM_Core_DAO::executeQuery($sql, $sqlParams); while ($result->fetch()) { $sql = "\nSELECT cpf.id, cpfv.id as price_field_value_id, cpfv.label, cpfv.amount, cpfv.count\nFROM civicrm_price_field cpf\nLEFT JOIN civicrm_price_field_value cpfv ON cpf.id = cpfv.price_field_id\nWHERE cpf.price_set_id = %1\n"; $lineParams = array('entity_table' => 'civicrm_contribution', 'entity_id' => $result->id); if ($result->membership_id) { $sql .= " AND cpf.name = %2 AND cpfv.membership_type_id = %3 "; $params = array('1' => array($result->price_set_id, 'Integer'), '2' => array('membership_amount', 'String'), '3' => array(CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $result->membership_id, 'membership_type_id'), 'Integer')); $res = CRM_Core_DAO::executeQuery($sql, $params); if ($res->fetch()) { $lineParams += array('price_field_id' => $res->id, 'label' => $res->label, 'qty' => 1, 'unit_price' => $res->amount, 'line_total' => $res->amount, 'participant_count' => $res->count ? $res->count : 0, 'price_field_value_id' => $res->price_field_value_id); } else { $lineParams['price_field_id'] = CRM_Core_DAO::getFieldValue('CRM_Upgrade_Snapshot_V4p2_Price_DAO_Field', $result->price_set_id, 'id', 'price_set_id'); $lineParams['label'] = 'Membership Amount'; $lineParams['qty'] = 1; $lineParams['unit_price'] = $lineParams['line_total'] = $result->total_amount; $lineParams['participant_count'] = 0; } } else { $sql .= "AND cpfv.amount = %2"; //CRM-12273 //check if price_set_id is exist, if not use the default contribution amount if (isset($result->price_set_id)) { $priceSetId = $result->price_set_id; } else { $defaultPriceSets = CRM_Price_BAO_PriceSet::getDefaultPriceSet(); foreach ($defaultPriceSets as $key => $pSet) { if ($pSet['name'] == 'contribution_amount') { $priceSetId = $pSet['setID']; } } } $params = array('1' => array($priceSetId, 'Integer'), '2' => array($result->total_amount, 'String')); $res = CRM_Core_DAO::executeQuery($sql, $params); if ($res->fetch()) { $lineParams += array('price_field_id' => $res->id, 'label' => $res->label, 'qty' => 1, 'unit_price' => $res->amount, 'line_total' => $res->amount, 'participant_count' => $res->count ? $res->count : 0, 'price_field_value_id' => $res->price_field_value_id); } else { $params = array('price_set_id' => $priceSetId, 'name' => 'other_amount'); $defaults = array(); CRM_Upgrade_Snapshot_V4p2_Price_BAO_Field::retrieve($params, $defaults); if (!empty($defaults)) { $lineParams['price_field_id'] = $defaults['id']; $lineParams['label'] = $defaults['label']; $lineParams['price_field_value_id'] = CRM_Core_DAO::getFieldValue('CRM_Upgrade_Snapshot_V4p2_Price_DAO_FieldValue', $defaults['id'], 'id', 'price_field_id'); } else { $lineParams['price_field_id'] = CRM_Core_DAO::getFieldValue('CRM_Upgrade_Snapshot_V4p2_Price_DAO_Field', $priceSetId, 'id', 'price_set_id'); $lineParams['label'] = 'Contribution Amount'; } $lineParams['qty'] = 1; $lineParams['participant_count'] = 0; $lineParams['unit_price'] = $lineParams['line_total'] = $result->total_amount; } } CRM_Upgrade_Snapshot_V4p2_Price_BAO_LineItem::create($lineParams); } return TRUE; }