1 <?php
2
3 4 5 6 7 8 9 10 11
12
13 MainFactory::load_class('OrderItemPropertyRepositoryReaderInterface');
14
15 16 17 18 19 20 21
22 class OrderItemPropertyRepositoryReader implements OrderItemPropertyRepositoryReaderInterface
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_properties';
41
42 43 44 45
46 protected $key = 'orders_products_properties_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 getPropertyById(IdType $orderItemPropertyId)
71 {
72 $data = $this->db->where($this->key, $orderItemPropertyId->asInt())->get($this->table)->row_array();
73
74 if(empty($data))
75 {
76 throw new UnexpectedValueException('No order item property record matches the provided $orderItemPropertyId: '
77 . $orderItemPropertyId->asInt());
78 }
79
80 return $this->_createStoredOrderItemProperty($data);
81 }
82
83
84 85 86 87 88 89 90
91 public function getPropertiesByOrderItemId(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->_createStoredOrderItemProperty($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 _createStoredOrderItemProperty(array $storedOrderItemPropertyData)
117 {
118 $orderItemAttributeId = new IdType($storedOrderItemPropertyData[$this->key]);
119 $storedOrderItemProperty = $this->orderItemAttributeFactory->createStoredOrderItemAttribute($orderItemAttributeId);
120 $storedOrderItemProperty->setName(new StringType($storedOrderItemPropertyData['properties_name']));
121 $storedOrderItemProperty->setValue(new StringType($storedOrderItemPropertyData['values_name']));
122 $storedOrderItemProperty->setPrice(new DecimalType($storedOrderItemPropertyData['properties_price']));
123 $storedOrderItemProperty->setPriceType(new StringType($storedOrderItemPropertyData['properties_price_type']));
124 $storedOrderItemProperty->setCombisId(new IdType($storedOrderItemPropertyData['products_properties_combis_id']));
125
126 return $storedOrderItemProperty;
127 }
128 }