Validator.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Tax\Model\Calculation\Rule;
  7. use Magento\Framework\Exception\NoSuchEntityException;
  8. use Magento\Tax\Model\ClassModel as TaxClassModel;
  9. use Magento\Tax\Model\ClassModelRegistry;
  10. use Zend_Validate_Exception;
  11. class Validator extends \Magento\Framework\Validator\AbstractValidator
  12. {
  13. /**
  14. * @var ClassModelRegistry
  15. */
  16. protected $classModelRegistry;
  17. /**
  18. * @param ClassModelRegistry $classModelRegistry
  19. */
  20. public function __construct(ClassModelRegistry $classModelRegistry)
  21. {
  22. $this->classModelRegistry = $classModelRegistry;
  23. }
  24. /**
  25. * Validate rule model
  26. *
  27. * @param \Magento\Tax\Model\Calculation\Rule $value
  28. * @return boolean
  29. * @throws Zend_Validate_Exception If validation of $value is impossible
  30. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  31. * @SuppressWarnings(PHPMD.NPathComplexity)
  32. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  33. */
  34. public function isValid($value)
  35. {
  36. $messages = [];
  37. // Position is required and must be 0 or greater
  38. if (!\Zend_Validate::is(trim($value->getPosition()), 'NotEmpty')) {
  39. $this->addErrorMessage(
  40. $messages,
  41. '"%fieldName" is required. Enter and try again.',
  42. ['fieldName' => 'position']
  43. );
  44. }
  45. if (!\Zend_Validate::is(trim($value->getPosition()), 'GreaterThan', [-1])) {
  46. $this->addErrorMessage(
  47. $messages,
  48. 'The %fieldName value of "%value" must be greater than or equal to %minValue.',
  49. ['fieldName' => 'position', 'value' => $value->getPosition(), 'minValue' => 0]
  50. );
  51. }
  52. // Priority is required and must be 0 or greater
  53. if (!\Zend_Validate::is(trim($value->getPriority()), 'NotEmpty')) {
  54. $this->addErrorMessage(
  55. $messages,
  56. '"%fieldName" is required. Enter and try again.',
  57. ['fieldName' => 'priority']
  58. );
  59. }
  60. if (!\Zend_Validate::is(trim($value->getPriority()), 'GreaterThan', [-1])) {
  61. $this->addErrorMessage(
  62. $messages,
  63. 'The %fieldName value of "%value" must be greater than or equal to %minValue.',
  64. ['fieldName' => 'priority', 'value' => $value->getPriority(), 'minValue' => 0]
  65. );
  66. }
  67. // Code is required
  68. if (!\Zend_Validate::is(trim($value->getCode()), 'NotEmpty')) {
  69. $this->addErrorMessage(
  70. $messages,
  71. '"%fieldName" is required. Enter and try again.',
  72. ['fieldName' => 'code']
  73. );
  74. }
  75. // customer tax class ids is required
  76. if (($value->getCustomerTaxClassIds() === null) || !$value->getCustomerTaxClassIds()) {
  77. $this->addErrorMessage(
  78. $messages,
  79. '"%fieldName" is required. Enter and try again.',
  80. ['fieldName' => 'customer_tax_class_ids']
  81. );
  82. } else { // see if the customer tax class ids exist
  83. $customerTaxClassIds = $value->getCustomerTaxClassIds();
  84. foreach ($customerTaxClassIds as $customerTaxClassId) {
  85. try {
  86. $taxClass = $this->classModelRegistry->retrieve($customerTaxClassId);
  87. if ($taxClass === null || !($taxClass->getClassType() == TaxClassModel::TAX_CLASS_TYPE_CUSTOMER)) {
  88. $this->addErrorMessage(
  89. $messages,
  90. 'No such entity with %fieldName = %fieldValue',
  91. [
  92. 'fieldName' => 'customer_tax_class_ids',
  93. 'value' => $customerTaxClassId,
  94. ]
  95. );
  96. }
  97. } catch (NoSuchEntityException $e) {
  98. $this->addErrorMessage(
  99. $messages,
  100. $e->getRawMessage(),
  101. $e->getParameters()
  102. );
  103. }
  104. }
  105. }
  106. // product tax class ids is required
  107. if (($value->getProductTaxClassIds() === null) || !$value->getProductTaxClassIds()) {
  108. $this->addErrorMessage(
  109. $messages,
  110. '"%fieldName" is required. Enter and try again.',
  111. ['fieldName' => 'product_tax_class_ids']
  112. );
  113. } else { // see if the product tax class ids exist
  114. $productTaxClassIds = $value->getProductTaxClassIds();
  115. foreach ($productTaxClassIds as $productTaxClassId) {
  116. try {
  117. $taxClass = $this->classModelRegistry->retrieve($productTaxClassId);
  118. if ($taxClass === null || !($taxClass->getClassType() == TaxClassModel::TAX_CLASS_TYPE_PRODUCT)) {
  119. $this->addErrorMessage(
  120. $messages,
  121. 'No such entity with %fieldName = %fieldValue',
  122. [
  123. 'fieldName' => 'product_tax_class_ids',
  124. 'value' => $productTaxClassId,
  125. ]
  126. );
  127. }
  128. } catch (NoSuchEntityException $e) {
  129. $this->addErrorMessage(
  130. $messages,
  131. $e->getRawMessage(),
  132. $e->getParameters()
  133. );
  134. }
  135. }
  136. }
  137. // tax rate ids is required
  138. if (($value->getTaxRateIds() === null) || !$value->getTaxRateIds()) {
  139. $this->addErrorMessage(
  140. $messages,
  141. '"%fieldName" is required. Enter and try again.',
  142. ['fieldName' => 'tax_rate_ids']
  143. );
  144. }
  145. $this->_addMessages($messages);
  146. return empty($messages);
  147. }
  148. /**
  149. * Format error message
  150. *
  151. * @param string[] $messages
  152. * @param string $message
  153. * @param array $params
  154. * @return void
  155. */
  156. protected function addErrorMessage(&$messages, $message, $params)
  157. {
  158. $messages[$params['fieldName']] = __($message, $params);
  159. }
  160. }