/** * create financial transaction for premium * * @access public * @static */ static function createPremiumTrxn($params) { if ((empty($params['financial_type_id']) || empty($params['contributionId'])) && empty($params['oldPremium'])) { return; } if (!empty($params['cost'])) { $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $financialAccountType = CRM_Contribute_PseudoConstant::financialAccountType($params['financial_type_id']); $accountRelationship = CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND label IN ('Premiums Inventory Account is', 'Cost of Sales Account is')"); $toFinancialAccount = !empty($params['isDeleted']) ? 'Premiums Inventory Account is' : 'Cost of Sales Account is'; $fromFinancialAccount = !empty($params['isDeleted']) ? 'Cost of Sales Account is' : 'Premiums Inventory Account is'; $accountRelationship = array_flip($accountRelationship); $financialtrxn = array('to_financial_account_id' => $financialAccountType[$accountRelationship[$toFinancialAccount]], 'from_financial_account_id' => $financialAccountType[$accountRelationship[$fromFinancialAccount]], 'trxn_date' => date('YmdHis'), 'total_amount' => CRM_Utils_Array::value('cost', $params) ? $params['cost'] : 0, 'currency' => CRM_Utils_Array::value('currency', $params), 'status_id' => array_search('Completed', $contributionStatuses)); $trxnEntityTable['entity_table'] = 'civicrm_contribution'; $trxnEntityTable['entity_id'] = $params['contributionId']; CRM_Core_BAO_FinancialTrxn::create($financialtrxn, $trxnEntityTable); } if (!empty($params['oldPremium'])) { $premiumParams = array('id' => $params['oldPremium']['product_id']); $productDetails = array(); CRM_Contribute_BAO_ManagePremiums::retrieve($premiumParams, $productDetails); $params = array('cost' => CRM_Utils_Array::value('cost', $productDetails), 'currency' => CRM_Utils_Array::value('currency', $productDetails), 'financial_type_id' => CRM_Utils_Array::value('financial_type_id', $productDetails), 'contributionId' => $params['oldPremium']['contribution_id'], 'isDeleted' => TRUE); CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($params); } }
/** * Process the Premium Information. * * @param array $params * @param int $contributionID * @param int $premiumID * @param array $options */ public static function processPremium($params, $contributionID, $premiumID = NULL, $options = array()) { $selectedProductID = $params['product_name'][0]; $selectedProductOptionID = CRM_Utils_Array::value(1, $params['product_name']); $dao = new CRM_Contribute_DAO_ContributionProduct(); $dao->contribution_id = $contributionID; $dao->product_id = $selectedProductID; $dao->fulfilled_date = CRM_Utils_Date::processDate($params['fulfilled_date'], NULL, TRUE); $isDeleted = FALSE; //CRM-11106 $premiumParams = array('id' => $selectedProductID); $productDetails = array(); CRM_Contribute_BAO_ManagePremiums::retrieve($premiumParams, $productDetails); $dao->financial_type_id = CRM_Utils_Array::value('financial_type_id', $productDetails); if (!empty($options[$selectedProductID])) { $dao->product_option = $options[$selectedProductID][$selectedProductOptionID]; } if ($premiumID) { $ContributionProduct = new CRM_Contribute_DAO_ContributionProduct(); $ContributionProduct->id = $premiumID; $ContributionProduct->find(TRUE); if ($ContributionProduct->product_id == $selectedProductID) { $dao->id = $premiumID; } else { $ContributionProduct->delete(); $isDeleted = TRUE; } } $dao->save(); //CRM-11106 if ($premiumID == NULL || $isDeleted) { $premiumParams = array('cost' => CRM_Utils_Array::value('cost', $productDetails), 'currency' => CRM_Utils_Array::value('currency', $productDetails), 'financial_type_id' => CRM_Utils_Array::value('financial_type_id', $productDetails), 'contributionId' => $contributionID); if ($isDeleted) { $premiumParams['oldPremium']['product_id'] = $ContributionProduct->product_id; $premiumParams['oldPremium']['contribution_id'] = $ContributionProduct->contribution_id; } CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($premiumParams); } }
/** * Process the form. * * @param array $premiumParams * @param CRM_Contribute_BAO_Contribution $contribution */ protected function postProcessPremium($premiumParams, $contribution) { $hour = $minute = $second = 0; // assigning Premium information to receipt tpl $selectProduct = CRM_Utils_Array::value('selectProduct', $premiumParams); if ($selectProduct && $selectProduct != 'no_thanks') { $startDate = $endDate = ""; $this->assign('selectPremium', TRUE); $productDAO = new CRM_Contribute_DAO_Product(); $productDAO->id = $selectProduct; $productDAO->find(TRUE); $this->assign('product_name', $productDAO->name); $this->assign('price', $productDAO->price); $this->assign('sku', $productDAO->sku); $this->assign('option', CRM_Utils_Array::value('options_' . $premiumParams['selectProduct'], $premiumParams)); $periodType = $productDAO->period_type; if ($periodType) { $fixed_period_start_day = $productDAO->fixed_period_start_day; $duration_unit = $productDAO->duration_unit; $duration_interval = $productDAO->duration_interval; if ($periodType == 'rolling') { $startDate = date('Y-m-d'); } elseif ($periodType == 'fixed') { if ($fixed_period_start_day) { $date = explode('-', date('Y-m-d')); $month = substr($fixed_period_start_day, 0, strlen($fixed_period_start_day) - 2); $day = substr($fixed_period_start_day, -2) . "<br/>"; $year = $date[0]; $startDate = $year . '-' . $month . '-' . $day; } else { $startDate = date('Y-m-d'); } } $date = explode('-', $startDate); $year = $date[0]; $month = $date[1]; $day = $date[2]; switch ($duration_unit) { case 'year': $year = $year + $duration_interval; break; case 'month': $month = $month + $duration_interval; break; case 'day': $day = $day + $duration_interval; break; case 'week': $day = $day + $duration_interval * 7; } $endDate = date('Y-m-d H:i:s', mktime($hour, $minute, $second, $month, $day, $year)); $this->assign('start_date', $startDate); $this->assign('end_date', $endDate); } $dao = new CRM_Contribute_DAO_Premium(); $dao->entity_table = 'civicrm_contribution_page'; $dao->entity_id = $this->_id; $dao->find(TRUE); $this->assign('contact_phone', $dao->premiums_contact_phone); $this->assign('contact_email', $dao->premiums_contact_email); //create Premium record $params = array('product_id' => $premiumParams['selectProduct'], 'contribution_id' => $contribution->id, 'product_option' => CRM_Utils_Array::value('options_' . $premiumParams['selectProduct'], $premiumParams), 'quantity' => 1, 'start_date' => CRM_Utils_Date::customFormat($startDate, '%Y%m%d'), 'end_date' => CRM_Utils_Date::customFormat($endDate, '%Y%m%d')); if (!empty($premiumParams['selectProduct'])) { $daoPremiumsProduct = new CRM_Contribute_DAO_PremiumsProduct(); $daoPremiumsProduct->product_id = $premiumParams['selectProduct']; $daoPremiumsProduct->premiums_id = $dao->id; $daoPremiumsProduct->find(TRUE); $params['financial_type_id'] = $daoPremiumsProduct->financial_type_id; } //Fixed For CRM-3901 $daoContrProd = new CRM_Contribute_DAO_ContributionProduct(); $daoContrProd->contribution_id = $contribution->id; if ($daoContrProd->find(TRUE)) { $params['id'] = $daoContrProd->id; } CRM_Contribute_BAO_Contribution::addPremium($params); if ($productDAO->cost && !empty($params['financial_type_id'])) { $trxnParams = array('cost' => $productDAO->cost, 'currency' => $productDAO->currency, 'financial_type_id' => $params['financial_type_id'], 'contributionId' => $contribution->id); CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($trxnParams); } } elseif ($selectProduct == 'no_thanks') { //Fixed For CRM-3901 $daoContrProd = new CRM_Contribute_DAO_ContributionProduct(); $daoContrProd->contribution_id = $contribution->id; if ($daoContrProd->find(TRUE)) { $daoContrProd->delete(); } } }
/** * Function to process the Premium Information * * @access public * * @return None */ static function processPremium(&$params, $contributionID, $premiumID = NULL, &$options = NULL) { $dao = new CRM_Contribute_DAO_ContributionProduct(); $dao->contribution_id = $contributionID; $dao->product_id = $params['product_name'][0]; $dao->fulfilled_date = CRM_Utils_Date::processDate($params['fulfilled_date'], NULL, TRUE); $isDeleted = False; //CRM-11106 $premiumParams = array('id' => $params['product_name'][0]); $productDetails = array(); CRM_Contribute_BAO_ManagePremiums::retrieve($premiumParams, $productDetails); $dao->financial_type_id = CRM_Utils_Array::value('financial_type_id', $productDetails); if (CRM_Utils_Array::value($params['product_name'][0], $options)) { $dao->product_option = $options[$params['product_name'][0]][$params['product_name'][1]]; } if ($premiumID) { $premoumDAO = new CRM_Contribute_DAO_ContributionProduct(); $premoumDAO->id = $premiumID; $premoumDAO->find(TRUE); if ($premoumDAO->product_id == $params['product_name'][0]) { $dao->id = $premiumID; $premium = $dao->save(); } else { $premoumDAO->delete(); $isDeleted = TRUE; $premium = $dao->save(); } } else { $premium = $dao->save(); } //CRM-11106 if ($premiumID == NULL || $isDeleted) { $params = array('cost' => CRM_Utils_Array::value('cost', $productDetails), 'currency' => CRM_Utils_Array::value('currency', $productDetails), 'financial_type_id' => CRM_Utils_Array::value('financial_type_id', $productDetails), 'contributionId' => $contributionID); if ($isDeleted) { $params['oldPremium']['product_id'] = $premoumDAO->product_id; $params['oldPremium']['contribution_id'] = $premoumDAO->contribution_id; } CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($params); } }