arch-8.x-1.x-dev/modules/price/src/Manager/VatCategoryManager.php

modules/price/src/Manager/VatCategoryManager.php
<?php

namespace Drupal\arch_price\Manager;

use Drupal\arch_price\Entity\VatCategory;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * VAT category manager.
 *
 * @package Drupal\arch_price\Manager
 */
class VatCategoryManager implements VatCategoryManagerInterface, ContainerInjectionInterface {

  /**
   * Defined categories.
   *
   * @var \Drupal\arch_price\Entity\VatCategoryInterface[]
   */
  protected $categories;

  /**
   * Settings.
   *
   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
   */
  protected $settings;

  /**
   * Default VAT category ID.
   *
   * @var string
   */
  protected $defaultVatCategory;

  /**
   * Config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * VatCategoryManager constructor.
   *
   * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
   *   Key value store factory.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   Config factory.
   */
  public function __construct(
    KeyValueFactoryInterface $key_value_factory,
    ConfigFactoryInterface $config_factory,
  ) {
    $this->settings = $key_value_factory->get('arch_price.settings');
    $this->configFactory = $config_factory;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('keyvalue'),
      $container->get('config.factory')
    );
  }

  /**
   * Get default VAT category.
   *
   * @return \Drupal\arch_price\Entity\VatCategoryInterface
   *   Default VAT category.
   */
  public function getDefaultVatCategory() {
    if (!isset($this->defaultVatCategory)) {
      $this->getVatCategories();
      $default = $this->settings->get('default_vat_category', 'default');
      $this->defaultVatCategory = !empty($this->categories[$default]) ? $default : 'default';
    }
    return $this->categories[$this->defaultVatCategory];
  }

  /**
   * List of defined VAT categories.
   *
   * @return \Drupal\arch_price\Entity\VatCategoryInterface[]
   *   VAT category list.
   */
  public function getVatCategories() {
    if (!isset($this->categories)) {
      $config_ids = $this->configFactory->listAll('arch_price.vat_category.');
      foreach ($this->configFactory->loadMultiple($config_ids) as $config) {
        $data = $config->get();
        $categories[$data['id']] = VatCategory::create($data);
      }

      uasort($categories, '\Drupal\arch_price\Entity\VatCategory::sort');
      $this->categories = $categories;
    }
    return $this->categories;
  }

  /**
   * {@inheritdoc}
   */
  public function getVatCategoryListForWidget() {
    $skipp_fields = [
      'uuid',
      'langcode',
      'dependencies',
      'locked',
      'status',
      'description',
    ];
    $categories = [];
    foreach ($this->getVatCategories() as $vat_category) {
      if (!$vat_category->status()) {
        continue;
      }

      $category = $vat_category->toArray();
      foreach ($skipp_fields as $field) {
        unset($category[$field]);
      }
      $category['name'] = (string) $vat_category->getName();
      $categories[$vat_category->id()] = $category;
    }
    return $categories;
  }

  /**
   * Get VAT category.
   *
   * @param string $id
   *   VAT category ID.
   *
   * @return null|\Drupal\arch_price\Entity\VatCategoryInterface
   *   VAT category or NULL.
   */
  public function getVatCategory($id) {
    $categories = $this->getVatCategories();
    return $categories[$id] ?? NULL;
  }

  /**
   * Get rate for VAT category.
   *
   * @param string $id
   *   VAT category ID.
   *
   * @return float
   *   Rate.
   */
  public function getVatRate($id) {
    $category = $this->getVatCategory($id);
    if (!$category) {
      return 0;
    }
    return $category->getRate();
  }

  /**
   * Get percent rate for VAT category.
   *
   * @param string $id
   *   VAT category ID.
   *
   * @return float
   *   Rate percent.
   */
  public function getVatRatePercent($id) {
    $category = $this->getVatCategory($id);
    if (!$category) {
      return 0;
    }
    return $category->getRatePercent();
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc