<?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;
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter