diff --git a/src/app/backend/controllers/PromoCodesController.php b/src/app/backend/controllers/PromoCodesController.php index 24b6fa2..4576d81 100644 --- a/src/app/backend/controllers/PromoCodesController.php +++ b/src/app/backend/controllers/PromoCodesController.php @@ -54,6 +54,7 @@ class PromoCodesController extends Controller $data['code'] = $this->request->getPost('code', 'string', NULL ); $data['start_date'] = $this->request->getPost('start_date'); $data['end_date'] = $this->request->getPost('end_date'); + $data['single_use'] = $this->request->getPost('single_use'); $data['discount'] = $this->request->getPost('discount', 'string', NULL ); $data['description'] = $this->request->getPost('description'); $data['catalog_ids'] = $this->request->getPost('catalog', 'string', NULL ); @@ -120,6 +121,7 @@ class PromoCodesController extends Controller $data[0]['description'] = $this->request->getPost('description'); $data[0]['group_ids'] = $this->request->getPost('items', 'string', NULL ); $data[0]['all_items'] = $this->request->getPost('all_items', 'int', NULL); + $data[0]['single_use'] = $this->request->getPost('single_use', 'int', NULL); $cover = $this->uploadImage(); diff --git a/src/app/backend/views/promo_codes/addEdit.php b/src/app/backend/views/promo_codes/addEdit.php index 4a92676..183ac89 100644 --- a/src/app/backend/views/promo_codes/addEdit.php +++ b/src/app/backend/views/promo_codes/addEdit.php @@ -47,6 +47,14 @@ + + + +
+ ' ?> + +
+
diff --git a/src/app/frontend/controllers/AjaxController.php b/src/app/frontend/controllers/AjaxController.php index 4e9aa12..37fc67c 100644 --- a/src/app/frontend/controllers/AjaxController.php +++ b/src/app/frontend/controllers/AjaxController.php @@ -173,23 +173,62 @@ class AjaxController extends \controllers\ControllerBase } public function applyPromoCodeAction() { - $this->view->disable(); - $in_cart = $this->session->get('in_cart', []); - $cart = $this->common->getCartItems($in_cart, $this->lang_id); + try { + + $this->view->disable(); + $in_cart = $this->session->get('in_cart', []); + $cart = $this->common->getCartItems($in_cart, $this->lang_id); + + $promo_code = $this->request->getPost( 'promo_code', 'string', '' ); + + $promo_code = $this->models->getPromoCodes()->getOneDataByCode($promo_code); + $user = isset($this->models->getCustomers()->getOneData($this->session->get('id'))['0']) ? $this->models->getCustomers()->getOneData($this->session->get('id'))['0'] : ''; + + if(!empty($promo_code) && $promo_code[0]['single_use']){ + if( !empty($user)){ + if(!empty($user['email'])){ + $data['code'] = $promo_code[0]['code']; + $data['email'] = $user['email']; + $promo_code_check = $this->models->getPromoToUser()->getOneDataByCode($data); + if(!empty($promo_code_check)){ + throw new \Exception($this->t->_('error_promo_code_already_used')); + } + } else { + throw new \Exception($this->t->_('error_promo_code_empty_email')); + } + } else { + throw new \Exception($this->t->_('error_promo_code_empty_user')); + } - $promo_code = $this->request->getPost( 'promo_code', 'string', '' ); - $promo_code = $this->models->getPromoCodes()->getOneDataByCode($promo_code); - if(!empty($promo_code)) { - if($this->common->applyPromoCode($promo_code[0], $cart['items'])) { - $this->session->set('promo_code', $promo_code[0]); - $this->common->countOrderSum($cart); - echo json_encode($cart); - return; } + + if(!empty($promo_code)) { + if($this->common->applyPromoCode($promo_code[0], $cart['items'])) { + $this->session->set('promo_code', $promo_code[0]); + $this->common->countOrderSum($cart); + echo json_encode(['cart' => $cart, + 'successMessage' => $this->t->_('success_promo_code'), + 'status'=>'success' + ]); + return; + } else { + throw new \Exception($this->t->_('error_promo_code')); + } + } else { + throw new \Exception($this->t->_('error_promo_code_is_empty')); + } + + } catch (\Exception $e) { + + echo json_encode(['status'=>'error', + 'errorMessage' => $e->getMessage() + ]); + return null; } - return null; + + } } \ No newline at end of file diff --git a/src/app/frontend/controllers/DealerController.php b/src/app/frontend/controllers/DealerController.php index 2956f06..1f73d05 100644 --- a/src/app/frontend/controllers/DealerController.php +++ b/src/app/frontend/controllers/DealerController.php @@ -1520,6 +1520,9 @@ class DealerController extends \controllers\ControllerBase if( !empty( $order['proposal_number'] ) ) { + + + $this->sendmail->addCustomer( 2, $order ); $this->session->set( 'in_cart', []); diff --git a/src/app/frontend/controllers/MenuController.php b/src/app/frontend/controllers/MenuController.php index 1ec4077..dab0c93 100644 --- a/src/app/frontend/controllers/MenuController.php +++ b/src/app/frontend/controllers/MenuController.php @@ -211,6 +211,25 @@ class MenuController extends \controllers\ControllerBase if( !empty( $order['proposal_number'] ) ) { + + + /** + * single use promo code logic + */ + if(!empty($session_promo_code)){ + $user = $this->models->getCustomers()->getOneData($this->session->get('id'))['0']; + + if($session_promo_code['single_use'] && !empty($user)){ + if(!empty($user['email'])){ + $data['code'] = $session_promo_code['code']; + $data['email'] = $user['email']; + $this->models->getPromoToUser()->addData($data); + } + + } + } + + $this->sendmail->addCustomer( 2, $order ); $this->session->set( 'in_cart', []); diff --git a/src/app/frontend/messages/ru.php b/src/app/frontend/messages/ru.php index cae0db8..760f303 100644 --- a/src/app/frontend/messages/ru.php +++ b/src/app/frontend/messages/ru.php @@ -143,7 +143,7 @@ return array( "street_two" =>"пр-т Броварской, ст.м. Лесная, в сторону центра Киева;", "address_two" => "ул. Большая Кольцевая, 110-А, оптово-розничный рынок \"Столичный\", павильон \"Рыба и мясо\";", "address_three" => "пр-т Академика Глушкова №6, ст.м. Ипподром, напротив Южного автовокзала;", - "address_four" => "ул. Харьковское шоссе, 166-В, возле магазина \"Сільпо\";", + "address_four" => "ул. Харьковское шоссе, 164А, возле магазина \"Сільпо\";", "address_five" => "пр-т Оболонский 43, ст.м. Героев Днепра;", "address_six"=>"Киево-Святошинский р-н, с.Крюковщина, ул.Балукова, 14;", "address_seven"=>"ул. Архитектора Вербицкого, 22/1, возле магазина \"Велика кишеня\";", @@ -151,7 +151,7 @@ return array( "new_address_first" => 'ст.м. Лесная, пр-т Броварской, в сторону г. Бровары;', "new_address_second" => 'ул. Большая Кольцевая, 110-А, оптово-розничный рынок "Столичный", павильон "Рыба и мясо";', "new_address_third" => 'ст.м. Ипподром, пр-т Академика Глушкова №6, напротив Южного автовокзала;', - "new_address_fourth" => 'ул. Харьковское шоссе, 166-В, возле магазина "Сільпо";', + "new_address_fourth" => 'ул. Харьковское шоссе, 164А, возле магазина "Сільпо";', "new_address_fifth" => 'пр-т Оболонский 43, ст.м. Героев Днепра;', "new_address_sixth" => 'Киево-Святошинский р-н, с.Крюковщина, ул.Балукова, 14;', "new_address_seventh" => 'ул. Архитектора Вербицкого, 22/1, возле магазина "Велика кишеня";', @@ -388,4 +388,8 @@ return array( "faq_j_text1" => "В каждой карточке товара указаны все варианты фасовки этой позиции, которые существуют. Профессионалам стоит обратить внимание на большие фасовки. Для того, чтобы узнать наличие и цены на профессиональные упаковки в блоке «Фасовка» необходимо выбрать ту фасовку, которая я Вас интересует (рис. 16). Если она доступна к заказу, то в графе «Наличие» зеленым цветом будет отображаться «Есть в наличии». Но, если товар отсутствует в данный момент, то в графе «Наличие» будет отображаться фраза «Отсутствует» (рис.16,17). При интересе к конкретному товару, которого сейчас нет в наличии, Вы можете связаться с нашими менеджерами по номерам телефона, указанным на сайте, для уточнения сроков ближайших поступлений и заблаговременно зарезервировать данный товар. Когда товар появится в наличии, наши менеджеры свяжутся с Вами для оформления заказа.", "lang_name" => "rus", "saldo_period" => "за период", + "error_promo_code_is_empty" => "Промокод не указан", + "error_promo_code_empty_user" => "Промокод требует регистрации", + "error_promo_code_empty_email" => "Промокод требует указанный Email в карточке пользователя", + "error_promo_code_already_used" => "Данный промокод уже использовался этим пользователем" ); \ No newline at end of file diff --git a/src/app/frontend/messages/ua.php b/src/app/frontend/messages/ua.php index fa73863..cfe0771 100644 --- a/src/app/frontend/messages/ua.php +++ b/src/app/frontend/messages/ua.php @@ -163,7 +163,7 @@ return array( "street_two" =>"ст.м. Лісова, пр-т Броварський, Торговий павільон \"Професійне насіння\" №25;", "address_two" => "вул. Велика Кільцева 110-А, оптово-роздрібний ринок \"Столичний\", павільйон \"Риба та м'ясо\";", "address_three" => "ст.м. Іподром, пр-т Академіка Глушкова №6, магазин \"Професійне насіння\" навпроти Південного автовокзалу;", - "address_four" => "вул. Харьківське шосе 166-В, біля магазину \"Сільпо\"", + "address_four" => "вул. Харьківське шосе 164А, біля магазину \"Сільпо\"", "address_five" => "пр-т Оболонський, 43, ст.м. Героїв Дніпра;", "address_six"=>"Києво-Святошинський р-н, с.Крюківщина, вул.Балукова, 14;", "address_seven"=>"вул. Архітектора Вербицького 22/1", @@ -172,7 +172,7 @@ return array( "new_address_first" => 'ст.м. Лісова, пр-т Броварський, в сторону м. Бровари;', "new_address_second" => 'вул. Велика Кільцева, 110-А, оптово-роздрібний ринок "Столичний", павільйон "Риба та м\'ясо";', "new_address_third" => 'ст.м. Іподром, пр-т Академіка Глушкова №6, навпроти Південного автовокзалу;', - "new_address_fourth" => 'вул. Харківське шоссе, 166-В, біля магазину "Сільпо";', + "new_address_fourth" => 'вул. Харківське шоссе, 164А, біля магазину "Сільпо";', "new_address_fifth" => 'пр-т Оболонський 43, ст.м. Героїв Дніпра;', "new_address_sixth" => 'Києво-Святошинський р-н, с.Крюківщина, вул.Балукова, 14;', "new_address_seventh" => 'вул. Архітектора Вербицького, 22/1, біля магазину "Велика кишеня";', @@ -417,4 +417,8 @@ return array( "faq_j_text1" => "У кожній картці товару вказані всі варіанти фасування цієї позиції, які існують. Професіоналам варто звернути увагу на великі фасовки. Для того, щоб дізнатися про наявність та ціни на професійні упаковки в блоці «Фасовка» необхідно вибрати ту фасовку, яка Вас цікавить (мал. 16). Якщо вона доступна до замовлення, то в графі «Наявність» зеленим кольором буде відображатися «Є в наявності». Але, якщо товар відсутній в даний момент, то в графі «Наявність» буде відображатися фраза «Відсутній» (мал.16,17). При зацікавленності в конкретному товарі, якого зараз немає в наявності, Ви можете зв'язатися з нашими менеджерами за номерами телефону, вказаним на сайті, для уточнення термінів найближчих надходжень і завчасно зарезервувати даний товар. Коли товар з'явиться в наявності, наші менеджери зв'яжуться з Вами для оформлення замовлення.", "lang_name" => "ukr", "saldo_period" => "за період", + "error_promo_code_is_empty" => "Промокод не вказаний", + "error_promo_code_empty_user" => "Промокод потребує реєстрації", + "error_promo_code_empty_email" => "Промокод потребує вказаний Email в картці користувача", + "error_promo_code_already_used" => "Даний промокод вже використовувався цим користувачем" ); \ No newline at end of file diff --git a/src/app/frontend/views/menu/order.php b/src/app/frontend/views/menu/order.php index 979c47b..b870082 100644 --- a/src/app/frontend/views/menu/order.php +++ b/src/app/frontend/views/menu/order.php @@ -589,10 +589,16 @@ promo_code: $('#promo_code').val() }, success: function (cart) { - renderCart(cart); - $('#total_price_basket').text(cart['total_sum']); - $alert.addClass('alert-success').removeClass('alert-danger'); - $alert.find('strong').text(successMessage); + if(cart.status == 'success'){ + renderCart(cart.cart); + $('#total_price_basket').text(cart.cart['total_sum']); + $alert.addClass('alert-success').removeClass('alert-danger'); + $alert.find('strong').text(cart.successMessage); + } else { + $alert.addClass('alert-danger').removeClass('alert-success'); + $alert.find('strong').text(cart.errorMessage); + } + }, error: function (error) { $alert.addClass('alert-danger').removeClass('alert-success'); diff --git a/src/config/global.php b/src/config/global.php index e581a16..f5feb35 100644 --- a/src/config/global.php +++ b/src/config/global.php @@ -48,7 +48,7 @@ return '10001'=>'ст.м. Лісова, пр-т Броварський, Торговий павільон "Професійне насіння" №25;', '10002'=>'вул. Велика Кільцева 110-А, оптово-роздрібний ринок "Столичний", павільйон "Риба та м\'ясо";', '10003'=>'ст.м. Іподром, пр-т Академіка Глушкова, магазин "Професійне насіння" навпроти Південного автовокзалу;', - '10004'=>'вул. Харьківське шосе 166-В, біля магазину "Сільпо";', + '10004'=>'вул. Харьківське шосе 164А, біля магазину "Сільпо";', '10005'=>'ст.м. Героїв Дніпра, пр-т Оболонський 43;', '7' => "Адресна доставка кур’єром по м.Києву
", '77' => "Вартість доставки замовленнь складає 60 грн. У разі замовлення на суму більшу за 500 грн - доставка безкоштовна. Кур'єр попередньо узгодить з Вами час доставки телефоном.", @@ -76,7 +76,7 @@ return '10001'=>'ст.м. Лесная, пр-т Броварской, Торговий павильйон "Професійне насіння" №25;', '10002'=>'ул. Большая Окружная 110-А, оптово-розничный рынок "Столичный", павильон "Рыба и мясо";', '10003'=>'ст.м. Іподром, пр-т Академика Глушкова №6, магазин "Професійне насіння" напротив Южного автовокзала;', - '10004'=>'ул. Харьковское шоссе 166-В, магазин "Професійне насіння" возле магазина "Сільпо";', + '10004'=>'ул. Харьковское шоссе 164А, магазин "Професійне насіння" возле магазина "Сільпо";', '10005'=>'ст.м. Героев Днепра, пр-т Оболонський 43, магазин "Професійне насіння";', '7' => 'Адресная доставка курьером по г.Киеву
', "77" =>"Стоимость доставки заказа составляет 60 грн. В случае заказа на сумму большую 500 грн - доставка бесплатная. Курьер предварительно согласует с Вами время доставки по телефону.", diff --git a/src/lib/models.php b/src/lib/models.php index a92ed07..318f8dc 100644 --- a/src/lib/models.php +++ b/src/lib/models.php @@ -50,6 +50,7 @@ namespace protected $_reviews = false; protected $_modal = false; protected $_manager_mail = false; + protected $_promo_to_user = false; @@ -583,6 +584,17 @@ namespace return $this->_manager_mail; } + + public function getPromoToUser() + { + if( empty($this->_promo_to_user) ) + { + $this->_promo_to_user = new \models\promo_to_user(); + $this->_promo_to_user->setDi( $this->getDi() ); + } + + return $this->_promo_to_user; + } } } diff --git a/src/lib/models/promo_codes.php b/src/lib/models/promo_codes.php index aa28749..e58dac9 100644 --- a/src/lib/models/promo_codes.php +++ b/src/lib/models/promo_codes.php @@ -103,7 +103,9 @@ class promo_codes extends \db all_items, image, start_date, - end_date + end_date, + single_use + ) VALUES ( @@ -116,7 +118,8 @@ class promo_codes extends \db :all_items, :image, :start_date, - :end_date + :end_date, + :single_use ) RETURNING id ', @@ -130,7 +133,8 @@ class promo_codes extends \db 'all_items' => $data['all_items'], 'image' => $data['image'], 'start_date' => $data['start_date'], - 'end_date' => $data['end_date'] + 'end_date' => $data['end_date'], + 'single_use' => $data['single_use'] ], -1 ); @@ -154,7 +158,8 @@ class promo_codes extends \db all_items = :all_items, image = :image, start_date = :start_date, - end_date = :end_date + end_date = :end_date, + single_use = :single_use WHERE id = :id ', @@ -168,6 +173,7 @@ class promo_codes extends \db 'image' => $data['image'], 'start_date' => $data['start_date'], 'end_date' => $data['end_date'], + 'single_use' => $data['single_use'], 'id' => $id ] ); diff --git a/src/lib/models/promo_to_user.php b/src/lib/models/promo_to_user.php new file mode 100644 index 0000000..77a69f7 --- /dev/null +++ b/src/lib/models/promo_to_user.php @@ -0,0 +1,157 @@ +get( + ' + SELECT * FROM + public.promo_to_user + ' + , + [ + ], + -1 + ); + } + + + public function getOneData($id) + { + return $this->get( + ' + SELECT * + FROM public.promo_to_user + WHERE + id = :id + ', + [ + 'id' => $id + ], + -1 + ); + } + + public function getOneDataByCode($data) + { + return $this->get( + " + SELECT * + FROM public.promo_to_user + WHERE + code = :code + AND + email = :email + ", + [ + 'code' => $data['code'], + 'email' => $data['email'], + ], + -1 + ); + } + + public function getPromoByCode($code) { + return $this->get( + ' + SELECT * + FROM public.promo_to_user + WHERE + code = :code', + [ + 'code' => $code + ], + -1 + ); + } + + public function deleteData($id) + { + return $this->exec( + ' DELETE + FROM + public.promo_to_user + WHERE + id = :id + ', + [ + 'id' => $id + ] + ); + } + + public function addData($data) + { + + return $this->get( + ' + INSERT INTO + public.promo_to_user + ( + code, + email + + ) + VALUES + ( + :code, + :email + + ) + RETURNING id + ', + [ + 'code' => $data['code'], + 'email' => $data['email'], + + ], + -1 + ); + + + } + + public function updateData($data, $id) + { + + return $this->exec( + ' + UPDATE + public.promo_to_user + SET + code = :code, + email = :email + + WHERE + id = :id + ', + [ + 'code' => $data['code'], + 'email' => $data['email'], + 'id' => $id + ] + ); + } + + public function countData() + { + return $this->get( + ' + SELECT + COUNT(id) AS total + FROM + public.promo_to_user + ', + [ + + ], + -1 + ); + } +} \ No newline at end of file diff --git a/www/css/main.css b/www/css/main.css index 6226320..58e3822 100644 --- a/www/css/main.css +++ b/www/css/main.css @@ -3122,9 +3122,9 @@ ul.prof_rubrics li a.active{color:#ffffff;background:#4fa22c;border-radius:5px;t float: left; } -.zasobi_zakhistu_logo { - background: url('/images/background_logo_all_01.png') repeat-y 50% -20px; -} +/*.zasobi_zakhistu_logo {*/ + /*background: url('/images/background_logo_all_01.png') repeat-y 50% -20px;*/ +/*}*/ /****************email-settings**********************/ .email-settings_title { diff --git a/www/js/main.js b/www/js/main.js index e9f2865..0bda402 100644 --- a/www/js/main.js +++ b/www/js/main.js @@ -637,7 +637,7 @@ $(document).ready(function() var contentString4 = '
'+ - '

м. Київ, вул. Харьківське шосе 166-В, біля магазину "Сільпо"

'+ + '

м. Київ, вул. Харьківське шосе 164А, біля магазину "Сільпо"

'+ '

9:00 - 19:00

'+ '

Пн-Пт

'+ '

9:00 - 18:00

'+ diff --git a/www/js/main_ru.js b/www/js/main_ru.js index 70ed5c7..2095bd1 100644 --- a/www/js/main_ru.js +++ b/www/js/main_ru.js @@ -681,7 +681,7 @@ $(document).ready(function() var contentString4 = '
'+ - '

м. Київ, вул. Харьківське шосе 166-В, біля магазину "Сільпо"

'+ + '

м. Київ, вул. Харьківське шосе 164А, біля магазину "Сільпо"

'+ '

9:00 - 19:00

'+ '

Пн-Пт

'+ '

9:00 - 18:00

'+ -- libgit2 0.21.4