8 use Magento\SalesRule\Api\Data\RuleExtensionFactory;
9 use Magento\SalesRule\Api\Data\RuleExtensionInterface;
51 private $extensionFactory;
68 Json $serializer =
null,
69 RuleExtensionFactory $extensionFactory =
null 77 $this->extensionFactory = $extensionFactory ?:
87 public function toDataModel(
Rule $ruleModel)
89 $modelData = $ruleModel->
getData();
90 $modelData = $this->convertExtensionAttributesToObject($modelData);
93 $dataModel = $this->ruleDataFactory->create([
'data' => $modelData]);
107 $conditionSerialized = $ruleModel->getConditionsSerialized();
108 if ($conditionSerialized) {
109 $conditionArray = $this->serializer->unserialize($conditionSerialized);
110 $conditionDataModel = $this->arrayToConditionDataModel($conditionArray);
111 $dataModel->setCondition($conditionDataModel);
113 $dataModel->setCondition(
null);
125 $actionConditionSerialized = $ruleModel->getActionsSerialized();
126 if ($actionConditionSerialized) {
127 $actionConditionArray = $this->serializer->unserialize($actionConditionSerialized);
128 $actionConditionDataModel = $this->arrayToConditionDataModel($actionConditionArray);
129 $dataModel->setActionCondition($actionConditionDataModel);
131 $dataModel->setActionCondition(
null);
143 if ($dataModel->getStoreLabels() !==
null) {
145 foreach ($dataModel->getStoreLabels() as
$storeId => $storeLabel) {
146 $storeLabelObj = $this->ruleLabelFactory->create();
147 $storeLabelObj->setStoreId(
$storeId);
148 $storeLabelObj->setStoreLabel($storeLabel);
149 $storeLabels[] = $storeLabelObj;
151 $dataModel->setStoreLabels($storeLabels);
162 if ($dataModel->getCouponType()) {
164 switch ((
int)$dataModel->getCouponType()) {
165 case \Magento\SalesRule\Model\Rule::COUPON_TYPE_NO_COUPON:
168 case \Magento\SalesRule\Model\Rule::COUPON_TYPE_SPECIFIC:
171 case \Magento\SalesRule\Model\Rule::COUPON_TYPE_AUTO:
176 $dataModel->setCouponType($mappedValue);
187 private function convertExtensionAttributesToObject(array
$data)
189 if (isset(
$data[
'extension_attributes']) && is_array(
$data[
'extension_attributes'])) {
191 $data[
'extension_attributes'] = $this->extensionFactory->create([
'data' =>
$data[
'extension_attributes']]);
216 public function arrayToConditionDataModel(array $input)
219 $conditionDataModel = $this->conditionDataFactory->create();
220 foreach ($input as $key =>
$value) {
223 $conditionDataModel->setConditionType(
$value);
226 $conditionDataModel->setAttributeName(
$value);
229 $conditionDataModel->setOperator(
$value);
232 $conditionDataModel->setValue(
$value);
235 $conditionDataModel->setAggregatorType(
$value);
239 foreach (
$value as $condition) {
240 $conditions[] = $this->arrayToConditionDataModel($condition);
242 $conditionDataModel->setConditions($conditions);
247 return $conditionDataModel;
mapActionConditions(RuleDataModel $dataModel, Rule $ruleModel)
const COUPON_TYPE_NO_COUPON
mapStoreLabels(RuleDataModel $dataModel)
const COUPON_TYPE_SPECIFIC_COUPON
__construct(\Magento\SalesRule\Model\RuleFactory $ruleFactory, \Magento\SalesRule\Api\Data\RuleInterfaceFactory $ruleDataFactory, \Magento\SalesRule\Api\Data\ConditionInterfaceFactory $conditionDataFactory, \Magento\SalesRule\Api\Data\RuleLabelInterfaceFactory $ruleLabelFactory, \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor, Json $serializer=null, RuleExtensionFactory $extensionFactory=null)
mapConditions(RuleDataModel $dataModel, Rule $ruleModel)
mapFields(RuleDataModel $dataModel, Rule $ruleModel)
mapCouponType(RuleDataModel $dataModel)
getData($key='', $index=null)