_id = CRM_Utils_Request::retrieve('ppId', 'Positive', $this); CRM_Utils_System::setTitle(ts('Edit Scheduled Pledge Payment')); } /** * Set default values for the form. * the default values are retrieved from the database. */ public function setDefaultValues() { $defaults = []; if ($this->_id) { $params['id'] = $this->_id; CRM_Pledge_BAO_PledgePayment::retrieve($params, $defaults); if (isset($defaults['contribution_id'])) { $this->assign('pledgePayment', TRUE); } $status = CRM_Core_PseudoConstant::getName('CRM_Pledge_BAO_Pledge', 'status_id', $defaults['status_id']); $this->assign('status', $status); } $defaults['option_type'] = 1; return $defaults; } /** * Build the form object. */ public function buildQuickForm() { // add various dates $this->addField('scheduled_date', [], TRUE, FALSE); $this->addMoney('scheduled_amount', ts('Scheduled Amount'), TRUE, ['readonly' => TRUE], TRUE, 'currency', NULL, TRUE ); $optionTypes = [ '1' => ts('Adjust Pledge Payment Schedule?'), '2' => ts('Adjust Total Pledge Amount?'), ]; $element = $this->addRadio('option_type', NULL, $optionTypes, [], '
' ); $this->addButtons([ [ 'type' => 'next', 'name' => ts('Save'), 'spacing' => '         ', 'isDefault' => TRUE, ], [ 'type' => 'cancel', 'name' => ts('Cancel'), ], ]); } /** * Process the form submission. */ public function postProcess() { $formValues = $this->controller->exportValues($this->_name); $params = [ 'id' => $this->_id, 'scheduled_date' => $formValues['scheduled_date'], 'currency' => $formValues['currency'], ]; if (CRM_Utils_Date::overdue($params['scheduled_date'])) { $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Overdue'); } else { $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Pledge_BAO_Pledge', 'status_id', 'Pending'); } $pledgeId = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_PledgePayment', $params['id'], 'pledge_id'); CRM_Pledge_BAO_PledgePayment::add($params); $adjustTotalAmount = (CRM_Utils_Array::value('option_type', $formValues) == 2); $pledgeScheduledAmount = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_PledgePayment', $params['id'], 'scheduled_amount', 'id' ); $oldestPaymentAmount = CRM_Pledge_BAO_PledgePayment::getOldestPledgePayment($pledgeId, 2); if (($oldestPaymentAmount['count'] != 1) && ($oldestPaymentAmount['id'] == $params['id'])) { $oldestPaymentAmount = CRM_Pledge_BAO_PledgePayment::getOldestPledgePayment($pledgeId); } if (($formValues['scheduled_amount'] - $pledgeScheduledAmount) >= $oldestPaymentAmount['amount']) { $adjustTotalAmount = TRUE; } // update pledge status CRM_Pledge_BAO_PledgePayment::updatePledgePaymentStatus($pledgeId, [$params['id']], $params['status_id'], NULL, $formValues['scheduled_amount'], $adjustTotalAmount ); $statusMsg = ts('Pledge Payment Schedule has been updated.'); CRM_Core_Session::setStatus($statusMsg, ts('Saved'), 'success'); } }