Commit c73b18694f22591428f041c5437bb37facada6d1

Authored by Administrator
1 parent 6b4f9034

add new promocode logic

src/app/backend/controllers/PromoCodesController.php
... ... @@ -54,6 +54,7 @@ class PromoCodesController extends Controller
54 54 $data['code'] = $this->request->getPost('code', 'string', NULL );
55 55 $data['start_date'] = $this->request->getPost('start_date');
56 56 $data['end_date'] = $this->request->getPost('end_date');
  57 + $data['single_use'] = $this->request->getPost('single_use');
57 58 $data['discount'] = $this->request->getPost('discount', 'string', NULL );
58 59 $data['description'] = $this->request->getPost('description');
59 60 $data['catalog_ids'] = $this->request->getPost('catalog', 'string', NULL );
... ... @@ -120,6 +121,7 @@ class PromoCodesController extends Controller
120 121 $data[0]['description'] = $this->request->getPost('description');
121 122 $data[0]['group_ids'] = $this->request->getPost('items', 'string', NULL );
122 123 $data[0]['all_items'] = $this->request->getPost('all_items', 'int', NULL);
  124 + $data[0]['single_use'] = $this->request->getPost('single_use', 'int', NULL);
123 125  
124 126 $cover = $this->uploadImage();
125 127  
... ...
src/app/backend/views/promo_codes/addEdit.php
... ... @@ -47,6 +47,14 @@
47 47 </div>
48 48 </div>
49 49  
  50 +
  51 +
  52 +
  53 + <div class="clearfix input_wrapper">
  54 + <?= '<input type="checkbox" id="single_use" name="single_use" class="single_use" value="1" '.( isset( $page['0']['single_use'] ) && !empty( $page['0']['single_use'] ) && $page['0']['single_use'] == 1 ? 'checked="checked"' : '').' />' ?>
  55 + <label for="single_use"><span></span>Одноразовое использование</label>
  56 + </div>
  57 +
50 58 <div class="clearfix input_wrapper">
51 59 <div class="label"><label for="description">Описание</label></div>
52 60 <div class="input">
... ...
src/app/frontend/controllers/AjaxController.php
... ... @@ -173,23 +173,62 @@ class AjaxController extends \controllers\ControllerBase
173 173 }
174 174  
175 175 public function applyPromoCodeAction() {
176   - $this->view->disable();
177   - $in_cart = $this->session->get('in_cart', []);
178   - $cart = $this->common->getCartItems($in_cart, $this->lang_id);
  176 + try {
  177 +
  178 + $this->view->disable();
  179 + $in_cart = $this->session->get('in_cart', []);
  180 + $cart = $this->common->getCartItems($in_cart, $this->lang_id);
  181 +
  182 + $promo_code = $this->request->getPost( 'promo_code', 'string', '' );
  183 +
  184 + $promo_code = $this->models->getPromoCodes()->getOneDataByCode($promo_code);
  185 + $user = isset($this->models->getCustomers()->getOneData($this->session->get('id'))['0']) ? $this->models->getCustomers()->getOneData($this->session->get('id'))['0'] : '';
  186 +
  187 + if(!empty($promo_code) && $promo_code[0]['single_use']){
  188 + if( !empty($user)){
  189 + if(!empty($user['email'])){
  190 + $data['code'] = $promo_code[0]['code'];
  191 + $data['email'] = $user['email'];
  192 + $promo_code_check = $this->models->getPromoToUser()->getOneDataByCode($data);
  193 + if(!empty($promo_code_check)){
  194 + throw new \Exception($this->t->_('error_promo_code_already_used'));
  195 + }
  196 + } else {
  197 + throw new \Exception($this->t->_('error_promo_code_empty_email'));
  198 + }
  199 + } else {
  200 + throw new \Exception($this->t->_('error_promo_code_empty_user'));
  201 + }
179 202  
180   - $promo_code = $this->request->getPost( 'promo_code', 'string', '' );
181 203  
182   - $promo_code = $this->models->getPromoCodes()->getOneDataByCode($promo_code);
183 204  
184   - if(!empty($promo_code)) {
185   - if($this->common->applyPromoCode($promo_code[0], $cart['items'])) {
186   - $this->session->set('promo_code', $promo_code[0]);
187   - $this->common->countOrderSum($cart);
188   - echo json_encode($cart);
189   - return;
190 205 }
  206 +
  207 + if(!empty($promo_code)) {
  208 + if($this->common->applyPromoCode($promo_code[0], $cart['items'])) {
  209 + $this->session->set('promo_code', $promo_code[0]);
  210 + $this->common->countOrderSum($cart);
  211 + echo json_encode(['cart' => $cart,
  212 + 'successMessage' => $this->t->_('success_promo_code'),
  213 + 'status'=>'success'
  214 + ]);
  215 + return;
  216 + } else {
  217 + throw new \Exception($this->t->_('error_promo_code'));
  218 + }
  219 + } else {
  220 + throw new \Exception($this->t->_('error_promo_code_is_empty'));
  221 + }
  222 +
  223 + } catch (\Exception $e) {
  224 +
  225 + echo json_encode(['status'=>'error',
  226 + 'errorMessage' => $e->getMessage()
  227 + ]);
  228 + return null;
191 229 }
192   - return null;
  230 +
  231 +
193 232 }
194 233 }
195 234  
196 235 \ No newline at end of file
... ...
src/app/frontend/controllers/DealerController.php
... ... @@ -1520,6 +1520,9 @@ class DealerController extends \controllers\ControllerBase
1520 1520  
1521 1521 if( !empty( $order['proposal_number'] ) )
1522 1522 {
  1523 +
  1524 +
  1525 +
1523 1526 $this->sendmail->addCustomer( 2, $order );
1524 1527  
1525 1528 $this->session->set( 'in_cart', []);
... ...
src/app/frontend/controllers/MenuController.php
... ... @@ -211,6 +211,25 @@ class MenuController extends \controllers\ControllerBase
211 211  
212 212 if( !empty( $order['proposal_number'] ) )
213 213 {
  214 +
  215 +
  216 + /**
  217 + * single use promo code logic
  218 + */
  219 + if(!empty($session_promo_code)){
  220 + $user = $this->models->getCustomers()->getOneData($this->session->get('id'))['0'];
  221 +
  222 + if($session_promo_code['single_use'] && !empty($user)){
  223 + if(!empty($user['email'])){
  224 + $data['code'] = $session_promo_code['code'];
  225 + $data['email'] = $user['email'];
  226 + $this->models->getPromoToUser()->addData($data);
  227 + }
  228 +
  229 + }
  230 + }
  231 +
  232 +
214 233 $this->sendmail->addCustomer( 2, $order );
215 234  
216 235 $this->session->set( 'in_cart', []);
... ...
src/app/frontend/messages/ru.php
... ... @@ -143,7 +143,7 @@ return array(
143 143 "street_two" =>"пр-т Броварской, ст.м. Лесная, в сторону центра Киева;",
144 144 "address_two" => "ул. Большая Кольцевая, 110-А, оптово-розничный рынок \"Столичный\", павильон \"Рыба и мясо\";",
145 145 "address_three" => "пр-т Академика Глушкова №6, ст.м. Ипподром, напротив Южного автовокзала;",
146   - "address_four" => "ул. Харьковское шоссе, 166-В, возле магазина \"Сільпо\";",
  146 + "address_four" => "ул. Харьковское шоссе, 16, возле магазина \"Сільпо\";",
147 147 "address_five" => "пр-т Оболонский 43, ст.м. Героев Днепра;",
148 148 "address_six"=>"Киево-Святошинский р-н, с.Крюковщина, ул.Балукова, 14;",
149 149 "address_seven"=>"ул. Архитектора Вербицкого, 22/1, возле магазина \"Велика кишеня\";",
... ... @@ -151,7 +151,7 @@ return array(
151 151 "new_address_first" => 'ст.м. Лесная, пр-т Броварской, в сторону г. Бровары;',
152 152 "new_address_second" => 'ул. Большая Кольцевая, 110-А, оптово-розничный рынок "Столичный", павильон "Рыба и мясо";',
153 153 "new_address_third" => 'ст.м. Ипподром, пр-т Академика Глушкова №6, напротив Южного автовокзала;',
154   - "new_address_fourth" => 'ул. Харьковское шоссе, 166-В, возле магазина "Сільпо";',
  154 + "new_address_fourth" => 'ул. Харьковское шоссе, 16, возле магазина "Сільпо";',
155 155 "new_address_fifth" => 'пр-т Оболонский 43, ст.м. Героев Днепра;',
156 156 "new_address_sixth" => 'Киево-Святошинский р-н, с.Крюковщина, ул.Балукова, 14;',
157 157 "new_address_seventh" => 'ул. Архитектора Вербицкого, 22/1, возле магазина "Велика кишеня";',
... ... @@ -388,4 +388,8 @@ return array(
388 388 "faq_j_text1" => "В каждой карточке товара указаны все варианты фасовки этой позиции, которые существуют. Профессионалам стоит обратить внимание на большие фасовки. Для того, чтобы узнать наличие и цены на профессиональные упаковки <span>в блоке «Фасовка»</span> необходимо выбрать ту фасовку, которая я Вас интересует (рис. 16). Если она доступна к заказу, то <span>в графе «Наличие»</span> зеленым цветом будет отображаться «Есть в наличии». Но, если товар отсутствует в данный момент, то в графе «Наличие» будет отображаться фраза «Отсутствует» (рис.16,17). При интересе к конкретному товару, которого сейчас нет в наличии, Вы можете связаться с нашими менеджерами по номерам телефона, указанным на сайте, для уточнения сроков ближайших поступлений и заблаговременно зарезервировать данный товар. Когда товар появится в наличии, наши менеджеры свяжутся с Вами для оформления заказа.",
389 389 "lang_name" => "rus",
390 390 "saldo_period" => "за период",
  391 + "error_promo_code_is_empty" => "Промокод не указан",
  392 + "error_promo_code_empty_user" => "Промокод требует регистрации",
  393 + "error_promo_code_empty_email" => "Промокод требует указанный Email в карточке пользователя",
  394 + "error_promo_code_already_used" => "Данный промокод уже использовался этим пользователем"
391 395 );
392 396 \ No newline at end of file
... ...
src/app/frontend/messages/ua.php
... ... @@ -163,7 +163,7 @@ return array(
163 163 "street_two" =>"ст.м. Лісова, пр-т Броварський, Торговий павільон \"Професійне насіння\" №25;",
164 164 "address_two" => "вул. Велика Кільцева 110-А, оптово-роздрібний ринок \"Столичний\", павільйон \"Риба та м'ясо\";",
165 165 "address_three" => "ст.м. Іподром, пр-т Академіка Глушкова №6, магазин \"Професійне насіння\" навпроти Південного автовокзалу;",
166   - "address_four" => "вул. Харьківське шосе 166-В, біля магазину \"Сільпо\"",
  166 + "address_four" => "вул. Харьківське шосе 16, біля магазину \"Сільпо\"",
167 167 "address_five" => "пр-т Оболонський, 43, ст.м. Героїв Дніпра;",
168 168 "address_six"=>"Києво-Святошинський р-н, с.Крюківщина, вул.Балукова, 14;",
169 169 "address_seven"=>"вул. Архітектора Вербицького 22/1",
... ... @@ -172,7 +172,7 @@ return array(
172 172 "new_address_first" => 'ст.м. Лісова, пр-т Броварський, в сторону м. Бровари;',
173 173 "new_address_second" => 'вул. Велика Кільцева, 110-А, оптово-роздрібний ринок "Столичний", павільйон "Риба та м\'ясо";',
174 174 "new_address_third" => 'ст.м. Іподром, пр-т Академіка Глушкова №6, навпроти Південного автовокзалу;',
175   - "new_address_fourth" => 'вул. Харківське шоссе, 166-В, біля магазину "Сільпо";',
  175 + "new_address_fourth" => 'вул. Харківське шоссе, 16, біля магазину "Сільпо";',
176 176 "new_address_fifth" => 'пр-т Оболонський 43, ст.м. Героїв Дніпра;',
177 177 "new_address_sixth" => 'Києво-Святошинський р-н, с.Крюківщина, вул.Балукова, 14;',
178 178 "new_address_seventh" => 'вул. Архітектора Вербицького, 22/1, біля магазину "Велика кишеня";',
... ... @@ -417,4 +417,8 @@ return array(
417 417 "faq_j_text1" => "У кожній картці товару вказані всі варіанти фасування цієї позиції, які існують. Професіоналам варто звернути увагу на великі фасовки. Для того, щоб дізнатися про наявність та ціни на професійні упаковки <span>в блоці «Фасовка»</span> необхідно вибрати ту фасовку, яка Вас цікавить (мал. 16). Якщо вона доступна до замовлення, то <span>в графі «Наявність»</span> зеленим кольором буде відображатися «Є в наявності». Але, якщо товар відсутній в даний момент, то в графі «Наявність» буде відображатися фраза «Відсутній» (мал.16,17). При зацікавленності в конкретному товарі, якого зараз немає в наявності, Ви можете зв'язатися з нашими менеджерами за номерами телефону, вказаним на сайті, для уточнення термінів найближчих надходжень і завчасно зарезервувати даний товар. Коли товар з'явиться в наявності, наші менеджери зв'яжуться з Вами для оформлення замовлення.",
418 418 "lang_name" => "ukr",
419 419 "saldo_period" => "за період",
  420 + "error_promo_code_is_empty" => "Промокод не вказаний",
  421 + "error_promo_code_empty_user" => "Промокод потребує реєстрації",
  422 + "error_promo_code_empty_email" => "Промокод потребує вказаний Email в картці користувача",
  423 + "error_promo_code_already_used" => "Даний промокод вже використовувався цим користувачем"
420 424 );
421 425 \ No newline at end of file
... ...
src/app/frontend/views/menu/order.php
... ... @@ -589,10 +589,16 @@
589 589 promo_code: $('#promo_code').val()
590 590 },
591 591 success: function (cart) {
592   - renderCart(cart);
593   - $('#total_price_basket').text(cart['total_sum']);
594   - $alert.addClass('alert-success').removeClass('alert-danger');
595   - $alert.find('strong').text(successMessage);
  592 + if(cart.status == 'success'){
  593 + renderCart(cart.cart);
  594 + $('#total_price_basket').text(cart.cart['total_sum']);
  595 + $alert.addClass('alert-success').removeClass('alert-danger');
  596 + $alert.find('strong').text(cart.successMessage);
  597 + } else {
  598 + $alert.addClass('alert-danger').removeClass('alert-success');
  599 + $alert.find('strong').text(cart.errorMessage);
  600 + }
  601 +
596 602 },
597 603 error: function (error) {
598 604 $alert.addClass('alert-danger').removeClass('alert-success');
... ...
src/config/global.php
... ... @@ -48,7 +48,7 @@ return
48 48 '10001'=>'ст.м. Лісова, пр-т Броварський, Торговий павільон "Професійне насіння" №25;',
49 49 '10002'=>'вул. Велика Кільцева 110-А, оптово-роздрібний ринок "Столичний", павільйон "Риба та м\'ясо";',
50 50 '10003'=>'ст.м. Іподром, пр-т Академіка Глушкова, магазин "Професійне насіння" навпроти Південного автовокзалу;',
51   - '10004'=>'вул. Харьківське шосе 166-В, біля магазину "Сільпо";',
  51 + '10004'=>'вул. Харьківське шосе 16, біля магазину "Сільпо";',
52 52 '10005'=>'ст.м. Героїв Дніпра, пр-т Оболонський 43;',
53 53 '7' => "<b>Адресна доставка кур’єром по м.Києву</b><br />",
54 54 '77' => "Вартість доставки замовленнь складає 60 грн. У разі замовлення на суму більшу за 500 грн - доставка безкоштовна. Кур'єр попередньо узгодить з Вами час доставки телефоном.",
... ... @@ -76,7 +76,7 @@ return
76 76 '10001'=>'ст.м. Лесная, пр-т Броварской, Торговий павильйон "Професійне насіння" №25;',
77 77 '10002'=>'ул. Большая Окружная 110-А, оптово-розничный рынок "Столичный", павильон "Рыба и мясо";',
78 78 '10003'=>'ст.м. Іподром, пр-т Академика Глушкова №6, магазин "Професійне насіння" напротив Южного автовокзала;',
79   - '10004'=>'ул. Харьковское шоссе 166-В, магазин "Професійне насіння" возле магазина "Сільпо";',
  79 + '10004'=>'ул. Харьковское шоссе 16, магазин "Професійне насіння" возле магазина "Сільпо";',
80 80 '10005'=>'ст.м. Героев Днепра, пр-т Оболонський 43, магазин "Професійне насіння";',
81 81 '7' => '<b>Адресная доставка курьером по г.Киеву</b> <br />',
82 82 "77" =>"Стоимость доставки заказа составляет 60 грн. В случае заказа на сумму большую 500 грн - доставка бесплатная. Курьер предварительно согласует с Вами время доставки по телефону.",
... ...
src/lib/models.php
... ... @@ -50,6 +50,7 @@ namespace
50 50 protected $_reviews = false;
51 51 protected $_modal = false;
52 52 protected $_manager_mail = false;
  53 + protected $_promo_to_user = false;
53 54  
54 55  
55 56  
... ... @@ -583,6 +584,17 @@ namespace
583 584  
584 585 return $this->_manager_mail;
585 586 }
  587 +
  588 + public function getPromoToUser()
  589 + {
  590 + if( empty($this->_promo_to_user) )
  591 + {
  592 + $this->_promo_to_user = new \models\promo_to_user();
  593 + $this->_promo_to_user->setDi( $this->getDi() );
  594 + }
  595 +
  596 + return $this->_promo_to_user;
  597 + }
586 598 }
587 599 }
588 600  
... ...
src/lib/models/promo_codes.php
... ... @@ -103,7 +103,9 @@ class promo_codes extends \db
103 103 all_items,
104 104 image,
105 105 start_date,
106   - end_date
  106 + end_date,
  107 + single_use
  108 +
107 109 )
108 110 VALUES
109 111 (
... ... @@ -116,7 +118,8 @@ class promo_codes extends \db
116 118 :all_items,
117 119 :image,
118 120 :start_date,
119   - :end_date
  121 + :end_date,
  122 + :single_use
120 123 )
121 124 RETURNING id
122 125 ',
... ... @@ -130,7 +133,8 @@ class promo_codes extends \db
130 133 'all_items' => $data['all_items'],
131 134 'image' => $data['image'],
132 135 'start_date' => $data['start_date'],
133   - 'end_date' => $data['end_date']
  136 + 'end_date' => $data['end_date'],
  137 + 'single_use' => $data['single_use']
134 138 ],
135 139 -1
136 140 );
... ... @@ -154,7 +158,8 @@ class promo_codes extends \db
154 158 all_items = :all_items,
155 159 image = :image,
156 160 start_date = :start_date,
157   - end_date = :end_date
  161 + end_date = :end_date,
  162 + single_use = :single_use
158 163 WHERE
159 164 id = :id
160 165 ',
... ... @@ -168,6 +173,7 @@ class promo_codes extends \db
168 173 'image' => $data['image'],
169 174 'start_date' => $data['start_date'],
170 175 'end_date' => $data['end_date'],
  176 + 'single_use' => $data['single_use'],
171 177 'id' => $id
172 178 ]
173 179 );
... ...
src/lib/models/promo_to_user.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace models;
  4 +
  5 +
  6 +class promo_to_user extends \db
  7 +{
  8 + ///////////////////////////////////for_backend///////////////////////////////////////////
  9 + public function getAllData()
  10 + {
  11 +
  12 + return $this->get(
  13 + '
  14 + SELECT * FROM
  15 + public.promo_to_user
  16 + '
  17 + ,
  18 + [
  19 + ],
  20 + -1
  21 + );
  22 + }
  23 +
  24 +
  25 + public function getOneData($id)
  26 + {
  27 + return $this->get(
  28 + '
  29 + SELECT *
  30 + FROM public.promo_to_user
  31 + WHERE
  32 + id = :id
  33 + ',
  34 + [
  35 + 'id' => $id
  36 + ],
  37 + -1
  38 + );
  39 + }
  40 +
  41 + public function getOneDataByCode($data)
  42 + {
  43 + return $this->get(
  44 + "
  45 + SELECT *
  46 + FROM public.promo_to_user
  47 + WHERE
  48 + code = :code
  49 + AND
  50 + email = :email
  51 + ",
  52 + [
  53 + 'code' => $data['code'],
  54 + 'email' => $data['email'],
  55 + ],
  56 + -1
  57 + );
  58 + }
  59 +
  60 + public function getPromoByCode($code) {
  61 + return $this->get(
  62 + '
  63 + SELECT *
  64 + FROM public.promo_to_user
  65 + WHERE
  66 + code = :code',
  67 + [
  68 + 'code' => $code
  69 + ],
  70 + -1
  71 + );
  72 + }
  73 +
  74 + public function deleteData($id)
  75 + {
  76 + return $this->exec(
  77 + ' DELETE
  78 + FROM
  79 + public.promo_to_user
  80 + WHERE
  81 + id = :id
  82 + ',
  83 + [
  84 + 'id' => $id
  85 + ]
  86 + );
  87 + }
  88 +
  89 + public function addData($data)
  90 + {
  91 +
  92 + return $this->get(
  93 + '
  94 + INSERT INTO
  95 + public.promo_to_user
  96 + (
  97 + code,
  98 + email
  99 +
  100 + )
  101 + VALUES
  102 + (
  103 + :code,
  104 + :email
  105 +
  106 + )
  107 + RETURNING id
  108 + ',
  109 + [
  110 + 'code' => $data['code'],
  111 + 'email' => $data['email'],
  112 +
  113 + ],
  114 + -1
  115 + );
  116 +
  117 +
  118 + }
  119 +
  120 + public function updateData($data, $id)
  121 + {
  122 +
  123 + return $this->exec(
  124 + '
  125 + UPDATE
  126 + public.promo_to_user
  127 + SET
  128 + code = :code,
  129 + email = :email
  130 +
  131 + WHERE
  132 + id = :id
  133 + ',
  134 + [
  135 + 'code' => $data['code'],
  136 + 'email' => $data['email'],
  137 + 'id' => $id
  138 + ]
  139 + );
  140 + }
  141 +
  142 + public function countData()
  143 + {
  144 + return $this->get(
  145 + '
  146 + SELECT
  147 + COUNT(id) AS total
  148 + FROM
  149 + public.promo_to_user
  150 + ',
  151 + [
  152 +
  153 + ],
  154 + -1
  155 + );
  156 + }
  157 +}
0 158 \ No newline at end of file
... ...
www/css/main.css
... ... @@ -3122,9 +3122,9 @@ ul.prof_rubrics li a.active{color:#ffffff;background:#4fa22c;border-radius:5px;t
3122 3122 float: left;
3123 3123 }
3124 3124  
3125   -.zasobi_zakhistu_logo {
3126   - background: url('/images/background_logo_all_01.png') repeat-y 50% -20px;
3127   -}
  3125 +/*.zasobi_zakhistu_logo {*/
  3126 + /*background: url('/images/background_logo_all_01.png') repeat-y 50% -20px;*/
  3127 +/*}*/
3128 3128  
3129 3129 /****************email-settings**********************/
3130 3130 .email-settings_title {
... ...
www/js/main.js
... ... @@ -637,7 +637,7 @@ $(document).ready(function()
637 637  
638 638 var contentString4 =
639 639 '<div id="content_map">'+
640   - '<p>м. Київ, вул. Харьківське шосе 166-В, біля магазину "Сільпо"</p>'+
  640 + '<p>м. Київ, вул. Харьківське шосе 16, біля магазину "Сільпо"</p>'+
641 641 '<p>9:00 - 19:00</p>'+
642 642 '<p>Пн-Пт</p>'+
643 643 '<p>9:00 - 18:00</p>'+
... ...
www/js/main_ru.js
... ... @@ -681,7 +681,7 @@ $(document).ready(function()
681 681  
682 682 var contentString4 =
683 683 '<div id="content_map">'+
684   - '<p>м. Київ, вул. Харьківське шосе 166-В, біля магазину "Сільпо"</p>'+
  684 + '<p>м. Київ, вул. Харьківське шосе 16, біля магазину "Сільпо"</p>'+
685 685 '<p>9:00 - 19:00</p>'+
686 686 '<p>Пн-Пт</p>'+
687 687 '<p>9:00 - 18:00</p>'+
... ...