PaymentRequestItemInlineForm.php
Sun Oct 30 2022 16:19:54 GMT+0000 (Coordinated Universal Time)
<?php namespace Drupal\cfp_payment_request\Form; use Drupal\cfp_payment_request\Entity\PaymentRequestItem; use Drupal\cfp_payment_request\Entity\PaymentRequestItemType; use Drupal\Component\Serialization\Json; use Drupal\Core\Entity\Display\EntityFormDisplayInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\inline_entity_form\Form\EntityInlineForm; class PaymentRequestItemInlineForm extends EntityInlineForm { const DATA_SOURCE_CLASS = 'pr-data-source'; const DATA_COPY_NAME = 'data-pr-set'; const DATA_NAME_STARTS_WITH = 'data-pr-name-starts-with'; /** * {@inheritdoc} */ public function entityForm(array $entity_form, FormStateInterface $form_state) { $parent_entity = $form_state->getFormObject()->getEntity(); if ($parent_entity->getEntityTypeId() === 'cfp_payment_request') { $entity_form['#entity']->setParent($parent_entity); } $entity = $entity_form['#entity']; $form_display = $this->getFormDisplay($entity, $entity_form['#form_mode']); $this->extraFields($entity_form, $entity, $form_display); $entity_form = parent::entityForm($entity_form, $form_state); $this->attachValuesCopyBehaviour($entity_form, $parent_entity); return $entity_form; } /** * {@inheritdoc} */ public function isTableDragEnabled($element) { return FALSE; } protected function extraFields(&$form, PaymentRequestItem $entity, EntityFormDisplayInterface $form_display) { if ($form_display->getComponent('item_support_intensity') && $form_display->getComponent('cost_item_name')) { $form['#after_build'][] = '\Drupal\cfp_payment_request\Form\PaymentRequestItemInlineForm::statesToSupportIntensity'; $form['item_support_intensity'] = [ '#type' => 'container', ]; $entity = $form['#entity']; if (($pr = $entity->getParent()) && ($cfp = $pr->getParent())) { $name = 'will_be_build_after'; /** @var \Drupal\pos_entity_cost_item\AdditionalCostItem $items */ $items = $cfp->getWrappedAllItems(FALSE, TRUE); foreach ($items as $item_id => $item) { $form['item_support_intensity'][$item_id] = [ '#type' => 'container', 'contents' => [ '#markup' => '<label>Tételhez kapcsolódó támogatási intenzitás: </label><span class="price">' . $item->getSupportRatio() . '%</span>' ], '#states' => [ 'visible' => [ $name => ['value' => $item_id], ], ], '#attributes' => [ 'class' => ['item-support-intensity'] ], ]; } } } if ($form_display->getComponent('participation_type')) { $payment_request = $entity->getParent(); $cfp = $entity->getCfp(); $cost_item = $cfp->getCostItemEntities(); $cost_item = reset($cost_item); $own_participation = $cost_item->get('cost_item_participation'); if ($own_participation_value = $own_participation->value) { $own_participation_definition = $cost_item->getFieldDefinition('cost_item_participation'); $own_participation_label = $own_participation_definition->getSettings()['allowed_values'][$own_participation_value]; } $form['participation_type'] = [ '#type' => 'markup', '#markup' => '<div class="own-participation"><b>Vrsta sopstvenog učešća: </b>' . $own_participation_label . '</div>', '#weight' => 10, ]; } $payment_request_item_type = PaymentRequestItemType::load($entity->bundle()); if (!empty($payment_request_item_type->get('documents_helptext')) && $form_display->getComponent('documents_helptext')) { $helptext = $payment_request_item_type->get('documents_helptext'); $form['documents_helptext'] = [ '#type' => 'container', 'helptext' => [ '#type' => 'markup', '#markup' => '<div class="documents_helptext">' . $helptext . '</div>', ], ]; } } public static function statesToSupportIntensity($form, FormStateInterface $form_state) { if (isset($form['cost_item_name']['widget']['#name']) && isset($form['item_support_intensity'])) { $name = $form['cost_item_name']['widget']['#name']; foreach ($form['item_support_intensity'] as $item_id => &$element) { if (isset($element['#states']['visible'])) { $element['#states']['visible'] = [ '[name="' . $name . '"]' => ['value' => $item_id], ]; } } } // if (isset($form['cost_item_name']['widget']['#name'])) { // $entity = $form['#entity']; // if (($pr = $entity->getParent()) && ($cfp = $pr->getParent())) { // $name = $form['cost_item_name']['widget']['#name']; // /** @var \Drupal\pos_entity_cost_item\AdditionalCostItem $items */ // $items = $cfp->getWrappedAllItems(FALSE, TRUE); // // foreach ($items as $item_id => $item) { // // $form['item_support_intensity'][$item_id] = [ // '#type' => 'container', // 'contents' => [ // '#markup' => $item->getSupportRatio(), // ], // '#states' => [ // 'visible' => [ // '[name="' . $name . '"]' => ['value' => $item_id], // ], // ] // ]; // } // } // } return $form; } /** * @param $entity_form * */ protected function attachValuesCopyBehaviour(&$entity_form, $parent_entity) { if (isset($entity_form['cost_item_name']['widget'])) { $entity_form['cost_item_name']['widget']['#attributes']['class'][] = self::DATA_SOURCE_CLASS; $entity_form['cost_item_name']['widget']['#after_build'][] = '\Drupal\cfp_payment_request\Form\PaymentRequestItemInlineForm::constructNameStartsWithAfterBuild'; } else { return; } /** @var \Drupal\pos_entity_cfp\Entity\Cfp $cfp */ $cfp = $parent_entity->getParent(); $wrapped_items = $cfp->getWrappedAllItems(FALSE, TRUE); /** * Second parameter is either method for wrapped item, or field name of cost * item. * * @var $field_mapper */ $field_mapper = [ 'cf_manufacturer' => 'cost_item_manufacturer', 'cf_unique_item_id' => 'cost_item_identificator', 'cf_distributor' => 'cost_item_distributor', 'cf_distributor_vat_number' => 'cost_item_vat_number', 'cf_distributor_bank_account_num' => 'cost_item_distributor_account', 'item_support' => 'getSupportValue', 'item_pay_off' => 'getEligibleCost', 'item_net_unit' => 'cost_item_neto_price', 'item_unit_vat' => 'cost_item_vat', 'item_quantity' => 'cost_item_quantity', ]; foreach ($field_mapper as $value_field_name => $method_or_field) { $values = []; if (!isset($entity_form[$value_field_name]['widget'][0]['value'])) { continue; } foreach ($wrapped_items as $id => $wrapped_item) { if (method_exists($wrapped_item, $method_or_field)) { // $wrapped_item->getEligibleCost(); $values[$id] = $wrapped_item->$method_or_field(); } elseif ($wrapped_item->getCostItem()?->hasField($method_or_field)) { $values[$id] = $wrapped_item->getCostItem()->get($method_or_field)->value; } } $entity_form[$value_field_name]['widget'][0]['value']['#attributes'][self::DATA_COPY_NAME] = Json::encode($values); } $entity_form['#attached']['library'][] = 'cfp_payment_request/pr_item_autopopulate.js'; } /** * Constructs name starts with for inline entity form. */ public static function constructNameStartsWithAfterBuild($element, FormStateInterface $form_state) { $name_starts_with = explode('['. $element['#field_name'] . ']', $element['#name'])[0]; $element['#attributes'][self::DATA_NAME_STARTS_WITH] = $name_starts_with; return $element; } }
Comments