From 89ecf44a932bdc4a659402bdceef85e0654b8bf8 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 27 Dec 2016 12:01:19 +0200 Subject: [PATCH] add getShipments --- src/app/frontend/controllers/DealerController.php | 4 ++-- src/lib/models.php | 47 ++++++++++++++++++++++++++++++++++------------- src/lib/models/shipments.php | 587 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 623 insertions(+), 15 deletions(-) create mode 100644 src/lib/models/shipments.php diff --git a/src/app/frontend/controllers/DealerController.php b/src/app/frontend/controllers/DealerController.php index 7e0d98e..9ded13f 100644 --- a/src/app/frontend/controllers/DealerController.php +++ b/src/app/frontend/controllers/DealerController.php @@ -662,13 +662,13 @@ class DealerController extends \controllers\ControllerBase if($this->session->get('special_users_id') != null) { - $orders = $this->models->getOrders()->getOrdersByCustomerId( $this->session->get('id') ); + $orders = $this->models->getShipments()->getOrdersByCustomerId( $this->session->get('id') ); foreach($orders as $key => $value) { $orders[$key]['created_date'] = date('d', strtotime($value['created_date'])).'.'. date('m', strtotime($value['created_date'])).'.'. date('Y', strtotime($value['created_date'])); - $orders_sum = !empty($this->models->getOrders1C()->getOrdersSumById( $value['id'] )[0]) ? $this->models->getOrders()->getOrdersSumById( $value['id'] )[0] : 0; + $orders_sum = !empty($this->models->getShipments()->getOrdersSumById( $value['id'] )[0]) ? $this->models->getShipments()->getOrdersSumById( $value['id'] )[0] : 0; $orders[$key]['price'] = $orders_sum['price']; $orders[$key]['status'] = \config::get( 'global#status/'.$this->lang_id.'/'.$value['status'] ); } diff --git a/src/lib/models.php b/src/lib/models.php index fa80286..441171a 100644 --- a/src/lib/models.php +++ b/src/lib/models.php @@ -19,6 +19,7 @@ namespace protected $_properties = false; protected $_orders = false; protected $_orders_1c = false; + protected $_shipments = false; protected $_pages = false; protected $_news = false; protected $_customers = false; @@ -64,7 +65,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140321 * - * @return obj + * @return object */ public function getFilters() { @@ -105,7 +106,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140327 * - * @return obj + * @return object */ public function getRubricsNews() { @@ -126,7 +127,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140404 * - * @return obj + * @return object */ public function getProperties() { @@ -147,7 +148,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140422 * - * @return obj + * @return object */ public function getOrders() { @@ -168,7 +169,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140422 * - * @return obj + * @return object */ public function getOrders1C() { @@ -180,6 +181,26 @@ namespace return $this->_orders_1c; } + ///////////////////////////////////////////////////////////////////////////// + + /** + * models::getShipments + * + * @author Jane Bezmaternykh + * @version 0.1.20140422 + * + * @return object + */ + public function getShipments() + { + if( empty($this->_shipments) ) + { + $this->_shipments = new \models\shipments(); + $this->_shipments->setDi( $this->getDi() ); + } + + return $this->_shipments; + } ///////////////////////////////////////////////////////////////////////////// @@ -189,7 +210,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140423 * - * @return obj + * @return object */ public function getPages() { @@ -210,7 +231,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140423 * - * @return obj + * @return object */ public function getNews() { @@ -231,7 +252,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140425 * - * @return obj + * @return object */ public function getCustomers() { @@ -252,7 +273,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140428 * - * @return obj + * @return object */ public function getCatalog() { @@ -273,7 +294,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140505 * - * @return obj + * @return object */ public function getAdmins() { @@ -294,7 +315,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140506 * - * @return obj + * @return object */ public function getPartners() { @@ -315,7 +336,7 @@ namespace * @author Jane Bezmaternykh * @version 0.1.20140507 * - * @return obj + * @return object */ public function getCallback() { @@ -334,7 +355,7 @@ namespace * @author Vitaliy * @version 0.1.20140507 * - * @return obj + * @return object */ public function getSeoInfo() { diff --git a/src/lib/models/shipments.php b/src/lib/models/shipments.php new file mode 100644 index 0000000..2894270 --- /dev/null +++ b/src/lib/models/shipments.php @@ -0,0 +1,587 @@ +database; + $this->updateOrderId(); + try + + { + $connection->begin(); + if( !empty( $order['email'] ) ) + { + $data_customer_isset = $this->get( + ' + SELECT + id, + status + FROM + public.customers + WHERE + email = :email + LIMIT + 1 + ', + [ + 'email' => $order['email'] + ], + -1 + ); + } + else + { + $data_customer_isset = $this->get( + ' + SELECT + id, + status + FROM + public.customers + WHERE + phone = :phone + LIMIT + 1 + ', + [ + 'phone' => $order['phone'] + ], + -1 + ); + } + + if( empty( $data_customer_isset ) ) // new customer + { + $data_confirm_key = $this->getDi()->get('models')->getCustomers()->addNewCustomer( $order ); + $confirmed = 0; + $new = 1; + $customer_id = $data_confirm_key['0']['id']; + } + elseif( !empty( $data_customer_isset ) and $data_customer_isset['0']['status'] == 0 ) // the customer do not finish registration + { + $confirmed = 0; + $new = 0; + $customer_id = $data_customer_isset['0']['id']; + } + elseif( !empty( $data_customer_isset ) and $data_customer_isset['0']['status'] == 1 ) // the customer finish registration + { + $confirmed = 1; + $new = 0; + $customer_id = $data_customer_isset['0']['id']; + } + $data_orders = $this->get( + ' + INSERT INTO + public.shipments + ( + customer_id, + name, + phone, + city, + address, + delivery, + pay, + email, + comments, + action_discount_id, + firm_total, + promo_code + ) + VALUES + ( + :customer_id, + :name, + :phone, + :city, + :address, + :delivery, + :pay, + :email, + :comments, + :action_discount_id, + :firm_total, + :promo_code + ) + RETURNING id + ', + [ + 'customer_id' => $customer_id, + 'name' => $order['name'], + 'phone' => $order['phone'], + 'city' => $order['city'], + 'address' => $order['address'], + 'delivery' => $order['delivery'], + 'pay' => $order['pay'], + 'email' => $order['email'], + 'comments' => $order['comments'], + 'action_discount_id' => isset($order['action_id']) ? $order['action_id'] : null, + 'firm_total' => isset($order['firm_total']) ? $order['firm_total'] : null, + 'promo_code' => isset($order['promo_code']) ? $order['promo_code'] : null + ], + -1 + ); + + foreach( $order['items'] as $i ) + { + $data_orders2items = $this->get( + ' + INSERT INTO + public.shipments2items + ( + order_id, + item_id, + item_count, + price + ) + VALUES + ( + :order_id, + :item_id, + :item_count, + :price + ) + ', + [ + 'order_id' => $data_orders['0']['id'], + 'item_id' => $i['id'], + 'item_count' => $i['count'], + 'price' => $i['price2'] + ] + ); + } + + $data = + [ + 'proposal_number' => $data_orders['0']['id'], + 'confirmed' => $confirmed, + 'new' => $new, + ]; + + if( $order['delivery'] == 3 || $order['delivery'] == 4 ) + { + switch( $order['delivery'] ) + { + case 3: + default: + $order['rcpt_warehouse'] = substr( $order['store_address'], 0, strpos( $order['store_address'], '-' ) ); + $order['novaposhta_tnn'] = $this->getDi()->get('novaposhta')->ttn( $data_orders['0']['id'], $order['city'], $order['rcpt_warehouse'], NULL, $order['name'], $order['phone'], '10', $order['total_sum'] ); + //$order['novaposhta_tnn'] = $this->getDi()->get('novaposhta')->ttn_ref( $data_orders['0']['id'], $order['city_ref'], $order['store_ref'], NULL, $order['name'], $order['phone'], '10', $order['total_sum'] ); + break; + case 4: + $order['novaposhta_tnn'] = $this->getDi()->get('novaposhta')->ttn( $data_orders['0']['id'], $order['city'], NULL, $order['address'], $order['name'], $order['phone'], '10', $order['total_sum'] ); + break; + + + } + + if( !empty( $order['novaposhta_tnn'] ) && !empty( $data_orders['0']['id'] ) ) + { + $this->addNovaposhtaTnn( $order['novaposhta_tnn'], $data_orders['0']['id'] ); + $data['novaposhta_tnn'] = $order['novaposhta_tnn']; + } + } + + $connection->commit(); + return $data; + } + catch(\Exception $e) + { + $connection->rollback(); + } + + return false; + } + + ///////////////////////////////////////////////////////////////////////////// + + public function addNovaposhtaTnn( $tnn, $order_id ) + { + return $this->exec( + ' + UPDATE + public.shipments + SET + novaposhta_tnn = :novaposhta_tnn + WHERE + id = :id + ', + [ + 'novaposhta_tnn' => $tnn, + 'id' => $order_id + ] + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function getOrdersSumById($id) { + return $this->get( + ' + SELECT + SUM((price * item_count)) as price + FROM + public.shipments2items + WHERE + order_id = :id + GROUP BY + order_id + ', + [ + 'id' => $id, + ], + -1 + ); + } + + public function getOrdersByCustomerId( $customer_id ) + { + return $this->get( + ' + SELECT + id, + created_date, + status, + delivery + FROM + public.shipments + WHERE + customer_id = :customer_id + ORDER BY id DESC + ', + [ + 'customer_id' => $customer_id + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function getOrdersByOrderId( $order_id, $lang_id ) + { + return $this->get( + ' + SELECT + item_id, + item_count, + ( + SELECT + group_id + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) AS group_id, + ( + SELECT + firm + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) AS firm, + ( + SELECT + price2 + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) AS price2, + ( + SELECT + size + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) AS size, + ( + SELECT + title + FROM + public.items_i18n + WHERE + item_id = public.shipments2items.item_id + AND + lang_id = :lang_id + LIMIT 1 + ) AS title, + ( + SELECT + alias + FROM + public.items_group_alias + WHERE + group_id = + ( + SELECT + group_id + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) + LIMIT 1 + ) AS group_alias, + ( + SELECT + cover + FROM + public.items_group + WHERE + group_id = + ( + SELECT + group_id + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) + LIMIT 1 + ) as cover, + ( + SELECT + alias + FROM + public.types_i18n + WHERE + type = + ( + SELECT + type + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) + AND + lang_id = :lang_id + LIMIT 1 + ) AS type_alias, + ( + SELECT + alias + FROM + public.subtypes_i18n + WHERE + subtype = + ( + SELECT + subtype + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) + AND + type = + ( + SELECT + type + FROM + public.items + WHERE + id = public.shipments2items.item_id + LIMIT 1 + ) + AND + lang_id = :lang_id + ) AS subtype_alias + FROM + public.shipments2items + WHERE + order_id = :order_id + ', + [ + 'order_id' => $order_id, + 'lang_id' => $lang_id + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// + + public function getAllOrders( $page ) + { + return $this->get( + ' + SELECT + id, + name, + created_date, + phone, + comments, + status, + status_pay, + delivery + FROM + public.shipments + ORDER BY + created_date + LIMIT + '.\config::get( 'limits/admin_orders' ).' + OFFSET + '.($page-1)*(\config::get( 'limits/admin_orders' )) + , + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function getSortedOrders( $sort_type, $sort_id, $page ) + { + return $this->get( + ' + SELECT + id, + name, + created_date, + phone, + comments, + status, + status_pay, + delivery + FROM + public.shipments + WHERE + '.$sort_type.' = '.$sort_id.' + ORDER BY + created_date + LIMIT + '.\config::get( 'limits/admin_orders' ).' + OFFSET + '.($page-1)*(\config::get( 'limits/admin_orders' )) + , + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function getOrdersWithIds( $orders_ids ) + { + return $this->get( + ' + SELECT + order_id, + item_count, + price + FROM + public.shipments2items + WHERE + order_id IN ('.join( ',', $orders_ids ).') + ', + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function countAllOrders() + { + return $this->get( + ' + SELECT + COUNT(id) AS total + FROM + public.shipments + ', + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function countSortedOrders( $sort_type, $sort_id ) + { + return $this->get( + ' + SELECT + COUNT(id) AS total + FROM + public.shipments + WHERE + '.$sort_type.' = '.$sort_id.' + ', + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + public function countStatus() + { + return $this->get( + ' + SELECT + COUNT(status) AS total, + status + FROM + public.shipments + GROUP BY + status + ', + [ + + ], + -1 + ); + } + + public function updateOrderId() + { + return $this->get( + " + SELECT setval('orders_id_seq', (SELECT MAX(id) FROM public.shipments)) + ", + [ + + ], + -1 + ); + } + + ///////////////////////////////////////////////////////////////////////////// + + +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file -- libgit2 0.21.4