Source of file AdjustAmountFieldAction.php
Size: 3,907 Bytes - Last Modified: 2021-12-24T05:18:48+00:00
/var/www/docs.ssmods.com/process/src/src/Actions/AdjustAmountFieldAction.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | <?php namespace IQnection\FormBuilderPayments\Actions; use IQnection\FormBuilder\Model\FieldAction; use IQnection\FormBuilder\Fields\MoneyField; use SilverStripe\Forms; use IQnection\FormBuilderPayments\Extensions\PaymentField; use IQnection\FormBuilder\FormBuilder; class AdjustAmountFieldAction extends FieldAction { const ADJUSTMENT_TYPE_FIXED = 'Fixed Amount'; const ADJUSTMENT_TYPE_USER = 'User Defined'; private static $table_name = 'FormBuilderAdjustAmountFieldAction'; private static $singular_name = 'Adjust Charge Amount'; private static $db = [ 'Amount' => 'Currency', 'AdjustmentType' => "Enum('Fixed Amount,User Defined','Fixed Amount')" ]; private static $has_one = [ 'UserAmountField' => MoneyField::class ]; private static $defaults = [ 'AdjustmentType' => 'Fixed Amount' ]; private static $allowed_field_types = [ PaymentField::class ]; private static $form_builder_has_one_duplicates = [ 'UserAmountField' ]; public function getCMSFields() { $fields = parent::getCMSFields(); $amountField = $fields->dataFieldByName('Amount'); $fields->removeByName([ 'Amount', 'AdjustmentType', 'UserAmountFieldID' ]); $fields->addFieldToTab('Root.Main', Forms\SelectionGroup::create('AdjustmentType',[ self::ADJUSTMENT_TYPE_FIXED => Forms\SelectionGroup_Item::create( self::ADJUSTMENT_TYPE_FIXED, [ $amountField ] ), self::ADJUSTMENT_TYPE_USER => Forms\SelectionGroup_Item::create( self::ADJUSTMENT_TYPE_USER, [ Forms\DropdownField::create('UserAmountFieldID','Select User Input Field') ->setSource($this->getAvailableUserAmountFields()->map('ID','Name')) ->setEmptyString('-- Select --') ] ) ])); return $fields; } public function validate() { $result = parent::validate(); if ( ($this->AdjustmentType == self::ADJUSTMENT_TYPE_USER) && (!$this->UserAmountField()->Exists()) ) { $result->addError('You must select a money field'); } return $result; } public function getAvailableUserAmountFields() { $fieldIDs = [0]; foreach($this->FormBuilder()->DataFields() as $dataField) { if ($dataField instanceof MoneyField) { $fieldIDs[] = $dataField->ID; } } return MoneyField::get()->Filter('ID',$fieldIDs); } public function getActionData() { $actionData = parent::getActionData(); $actionData['action']['callback'] = 'actionAdjustPaymentAmount'; $actionData['action']['selector'] = $this->Parent()->getAmountField_jQuerySelector(); $actionData['action']['id'] = $this->ID; $actionData['action']['amount'] = [ '_default' => $this->Parent()->Amount, 'adjust' => $this->Amount, 'adjust_type' => $this->AdjustmentType, 'adjust_field' => $this->UserAmountField()->getjQuerySelector() ]; return $actionData; } public function singular_name() { $singular_name = parent::singular_name(); if ($this->Exists()) { $singular_name .= ' '.$this->dbObject('Amount')->Nice(); } return $singular_name; } public function AdjustAmount($amount, $formData, &$adjustments) { $previousAmount = $amount; $adjustment = 0; $hidden = $this->Parent()->isHidden($formData); if ( ($this->testConditions($formData)) && (!$hidden) ) { if ($this->AdjustmentType == self::ADJUSTMENT_TYPE_FIXED) { $adjustment = $this->Amount; } elseif ($this->AdjustmentType == self::ADJUSTMENT_TYPE_USER) { $linkedFieldName = $this->UserAmountField(); if ($linkedFieldName->Exists()) { $adjustment = floatval($formData[$linkedFieldName->getFrontendFieldName()]); } } } $amount = $previousAmount + $adjustment; $adjustments[] = [ 'hidden' => $hidden, 'actionID' => $this->ID, 'type' => $this->AdjustmentType, 'previousAmount' => $previousAmount, 'adjustment' => $adjustment, 'newAmount' => $amount, 'explain' => (string) $this->Explain() ]; return $amount; } } |