/**
  * 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);
     }
 }
Exemple #3
0
 /**
  * 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();
         }
     }
 }
Exemple #4
0
 /**
  * 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);
     }
 }