1 <?php
2 3 4 5 6 7 8 9 10
11
12 MainFactory::load_class('OrderItemRepositoryReaderInterface');
13
14 15 16 17 18 19 20
21 class OrderItemRepositoryReader implements OrderItemRepositoryReaderInterface
22 {
23 24 25 26
27 protected $db;
28
29 30 31 32
33 protected $orderItemFactory;
34
35
36 37 38 39 40 41
42 public function __construct(CI_DB_query_builder $db, OrderItemFactoryInterface $orderItemFactory)
43 {
44 $this->db = $db;
45 $this->orderItemFactory = $orderItemFactory;
46 }
47
48
49 50 51 52 53 54 55 56
57 public function getItemById(IdType $orderItemId)
58 {
59 $row = $this->db->select('orders_products_download.*, orders_products.*')
60 ->from('orders_products')
61 ->where('orders_products.orders_products_id', $orderItemId->asInt())
62 ->join('orders_products_download',
63 'orders_products.orders_id = orders_products_download.orders_id AND orders_products.orders_products_id = orders_products_download.orders_products_id',
64 'left')
65 ->get()
66 ->row_array();
67
68 if($row === null)
69 {
70 throw new UnexpectedValueException('The requested OrderItem was not found in database (ID:'
71 . $orderItemId->asInt() . ')');
72 }
73
74 $storedOrderItem = $this->orderItemFactory->createStoredOrderItem($orderItemId);
75
76 $this->_setDbValues($storedOrderItem, $row);
77
78 return $storedOrderItem;
79 }
80
81
82 83 84 85 86 87 88
89 public function getItemsByOrderId(IdType $orderId)
90 {
91 $data = $this->db->select('orders_products_download.*, orders_products.*')
92 ->from('orders_products')
93 ->where('orders_products.orders_id', $orderId->asInt())
94 ->join('orders_products_download',
95 'orders_products.orders_id = orders_products_download.orders_id AND orders_products.orders_products_id = orders_products_download.orders_products_id',
96 'left')
97 ->get()
98 ->result_array();
99
100 $storedOrderItems = array();
101
102 foreach($data as $row)
103 {
104 $storedOrderItem = $this->orderItemFactory->createStoredOrderItem(new IdType($row['orders_products_id']));
105 $this->_setDbValues($storedOrderItem, $row);
106 $storedOrderItems[] = $storedOrderItem;
107 }
108
109 $storedOrderItemCollection = MainFactory::create('StoredOrderItemCollection', $storedOrderItems);
110
111 return $storedOrderItemCollection;
112 }
113
114
115 116 117 118 119 120
121 protected function _setDbValues(StoredOrderItemInterface $storedOrderItem, array $data)
122 {
123 $storedOrderItem->setProductModel(new StringType($data['products_model']));
124 $storedOrderItem->setName(new StringType($data['products_name']));
125 $storedOrderItem->setPrice(new DecimalType($data['products_price']));
126 $storedOrderItem->setQuantity(new DecimalType($data['products_quantity']));
127 $storedOrderItem->setTax(new DecimalType($data['products_tax']));
128 $storedOrderItem->setTaxAllowed(new BoolType($data['allow_tax']));
129 $storedOrderItem->setDiscountMade(new DecimalType((double)$data['products_discount_made']));
130 $storedOrderItem->setCheckoutInformation(new StringType((string)$data['checkout_information']));
131 $storedOrderItem->setQuantityUnitName(new StringType($data['products_name']));
132
133 if(is_null($data['orders_products_download_id']) === false)
134 {
135 $downloadInformation = MainFactory::create('OrderItemDownloadInformation',
136 new FilenameStringType($data['orders_products_filename']),
137 new IntType($data['download_maxdays']),
138 new IntType($data['download_count']));
139 $storedOrderItem->setDownloadInformation($downloadInformation);
140 }
141 }
142 }