1 <?php
2
3 4 5 6 7 8 9 10 11
12
13 MainFactory::load_class('OrderItemAttributeRepositoryReaderInterface');
14
15 16 17 18 19 20 21
22 class OrderItemAttributeRepositoryReader implements OrderItemAttributeRepositoryReaderInterface
23 {
24 25 26 27
28 protected $orderItemAttributeFactory;
29
30 31 32 33
34 protected $db;
35
36 37 38 39
40 protected $table = 'orders_products_attributes';
41
42 43 44 45
46 protected $key = 'orders_products_attributes_id';
47
48
49 50 51 52 53 54
55 public function __construct(CI_DB_query_builder $db, OrderItemAttributeFactoryInterface $orderItemAttributeFactory)
56 {
57 $this->db = $db;
58 $this->orderItemAttributeFactory = $orderItemAttributeFactory;
59 }
60
61
62 63 64 65 66 67 68 69
70 public function getAttributeById(IdType $orderItemAttributeId)
71 {
72 $data = $this->db->where($this->key, $orderItemAttributeId->asInt())->get($this->table)->row_array();
73
74 if(empty($data))
75 {
76 throw new UnexpectedValueException('No order item attribute record matches the provided $orderItemAttributeId: '
77 . $orderItemAttributeId->asInt());
78 }
79
80 return $this->_createStoredOrderItemAttribute($data);
81 }
82
83
84 85 86 87 88 89 90
91 public function getAttributesByOrderItemId(IdType $orderItemId)
92 {
93 $storedOrderItemAttributes = array();
94
95 $results = $this->db->where('orders_products_id', $orderItemId->asInt())->get($this->table);
96
97 foreach($results->result_array() as $result)
98 {
99 $storedOrderItemAttributes[] = $this->_createStoredOrderItemAttribute($result);
100 }
101
102 $storedOrderItemAttributeCollection = MainFactory::create('StoredOrderItemAttributeCollection',
103 $storedOrderItemAttributes);
104
105 return $storedOrderItemAttributeCollection;
106 }
107
108
109 110 111 112 113 114 115
116 protected function _createStoredOrderItemAttribute(array $storedOrderItemAttributeData)
117 {
118 $orderItemAttributeId = new IdType($storedOrderItemAttributeData[$this->key]);
119 $storedOrderItemAttribute = $this->orderItemAttributeFactory->createStoredOrderItemAttribute($orderItemAttributeId);
120 $storedOrderItemAttribute->setName(new StringType($storedOrderItemAttributeData['products_options']));
121 $storedOrderItemAttribute->setValue(new StringType($storedOrderItemAttributeData['products_options_values']));
122 $storedOrderItemAttribute->setPrice(new DecimalType($storedOrderItemAttributeData['options_values_price']));
123 $storedOrderItemAttribute->setPriceType(new StringType($storedOrderItemAttributeData['price_prefix']));
124 $storedOrderItemAttribute->setOptionId(new IdType($storedOrderItemAttributeData['options_id']));
125 $storedOrderItemAttribute->setOptionValueId(new IdType($storedOrderItemAttributeData['options_values_id']));
126
127 return $storedOrderItemAttribute;
128 }
129 }