/var/www/vhosts/ihelp.ro/httpdocs/src/Controller
NameSizeModeActions
Admin/-0755rm
Api/-0755rm
Async/-0755rm
Component/-0755rm
Dashboard/-0755rm
AjaxController.php9040644editdlrm
AppController.php60900644editdlrm
CartsController.bk.php302280644editdlrm
CartsController.php182420644editdlrm
CategoriesController.php48970644editdlrm
CausesController.php110500644editdlrm
DonationsController.php29690644editdlrm
ErrorController.php17710644editdlrm
OrdersController.php203170644editdlrm
PagesController.php23170644editdlrm
PaymentsController.php90470644editdlrm
ProductFavoritesController.php65950644editdlrm
ProductsController.php71350644editdlrm
ProposedCausesController.php11920644editdlrm
SearchController.php30430644editdlrm
ShowcaseController.php6690644editdlrm
UserAddressesController.php14820644editdlrm
UsersController.php228460644editdlrm
Edit: /var/www/vhosts/ihelp.ro/httpdocs/src/Controller/OrdersController.php (20317B)
loadComponent('Tools'); } public function beforeFilter(\Cake\Event\EventInterface $event) { parent::beforeFilter($event); // Configure the login action to not require authentication, preventing // the infinite redirect loop issue $this->Authentication->addUnauthenticatedActions(['checkout', 'summary', 'addAddress']); } /** * checkout */ public function checkout() { $this->loadModel('Carts'); $auth = !empty($this->userAuth->id) ? $this->userAuth->id : false; if (!empty($this->userAuth->id)) { // daca este logat $cart = $this->Carts->find() ->contain(['CartProducts', 'Users', 'UserAddresses']) ->where(['Carts.user_id' => $this->userAuth->id, 'Carts.is_active' => true]) ->last(); } else { // daca nu este logat $cart_identifier = $this->identifireIdCartSession(); $cart = $this->Carts->find() ->contain(['CartProducts', 'Users', 'UserAddresses']) ->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true]) ->last(); } if ($cart) { //daca exita cos de cumparaturi // listare $this->loadModel('UserAddresses'); if (!empty($this->userAuth->id)) { $userAddresses = $this->UserAddresses->find() ->where(['UserAddresses.user_id' => $this->userAuth->id])->all(); if (!empty($userAddresses)) { $addresses = []; foreach ($userAddresses as $i => $address) { $addresses[$address->id] = $address->full_address; } } } elseif (!empty($cart->user_address)) { $userAddresses = $this->UserAddresses->find() ->where(['UserAddresses.user_id' => $cart->user->id])->all(); $addresses = []; foreach ($userAddresses as $i => $address) { $addresses[$address->id] = $address->full_address; } } else { $addresses = false; } if ($this->request->is(['patch', 'post', 'put'])) { $data = $this->request->getData(); if (!empty($this->userAuth->id)) { // logat if (!empty($addresses)) { //salvam cosul $cart = $this->Carts->patchEntity($cart, $data, ['validate' => 'checkout']); if ($this->Carts->save($cart)) { return $this->redirect(['controller' => 'Orders', 'action' => 'summary']); } } else { $data['user_id'] = $this->userAuth->id; //salveaza cosul cu id-ul adresei $cart = $this->Carts->patchEntity($cart, $data, ['validate' => 'checkout']); if ($this->Carts->save($cart)) { return $this->redirect(['controller' => 'Orders', 'action' => 'summary']); } } } else { //nelogat if (!empty($addresses)) { //salvam cosul $cart = $this->Carts->patchEntity($cart, $data, ['validate' => 'checkout']); if ($this->Carts->save($cart)) { return $this->redirect(['controller' => 'Orders', 'action' => 'summary']); } } else { $this->loadModel('Users'); $dataUser = []; $dataUser['id'] = (!empty($cart->user_id) ? $cart->user_id : NULL); if (empty($cart->user)) { $dataUser['password'] = $data['Users']['password']; $dataUser['email'] = $data['Users']['email']; $dataUser['gdpr_active'] = $data['Users']['gdpr_active']; $dataUser['role_id'] = USER; $user = $this->Users->newEmptyEntity(); } else { $user = $cart->user; } $dataUser['user_addresses'] = $data['user_addresses']; $dataUser['user_addresses'][0]['is_default'] = true; $dataUser['profile']['first_name'] = $dataUser['user_addresses'][0]['first_name']; $dataUser['profile']['last_name'] = $dataUser['user_addresses'][0]['last_name']; $dataUser['profile']['phone'] = $dataUser['user_addresses'][0]['phone']; //se salveaza user nou $user = $this->Users->patchEntity($user, $dataUser, ['associated' => ['UserAddresses', 'Profiles']]); if ($this->Users->save($user)) { $this->Carts->id = $cart->id; $this->Carts->saveField('user_id', $user->id); $this->Carts->saveField('user_address_id', $user->user_addresses[0]->id); $data['user_address_id'] = $user->user_addresses[0]->id; $data['user_id'] = $user->id; //salveaza cosul cu id-ul adresei $cart = $this->Carts->patchEntity($cart, $data, ['validate' => 'checkout']); if ($this->Carts->save($cart)) { return $this->redirect(['controller' => 'Orders', 'action' => 'summary']); } } else { $cart->setErrors($user->getErrors()); } } } } $totalPriceCart = $this->Tools->totalPriceCart($cart); $this->loadModel('Counties'); $counties = $this->Counties->find('list'); $this->loadModel('Cities'); $cities = $this->Cities->find('list'); $this->loadModel('PaymentMethods'); $paymentMethods = $this->PaymentMethods->find('list'); $this->set(compact('cart', 'totalPriceCart', 'paymentMethods', 'cities', 'auth', 'counties')); } else { return $this->redirect(['controller' => 'Carts', 'action' => 'view']); } } /** * Summary */ public function summary() { $this->loadModel('Carts'); // daca este user logat if (!empty($this->userAuth->id)) { $cart = $this->Carts->find('all') ->contain(['CartProducts', 'UserAddresses', 'PaymentMethods', 'CartProducts.Products']) ->where(['Carts.user_id' => $this->userAuth->id, 'Carts.is_active' => true]) ->last(); } else { $cart_identifier = $this->identifireIdCartSession(); $cart = $this->Carts->find('all') ->contain(['CartProducts', 'UserAddresses', 'PaymentMethods', 'CartProducts.Products']) ->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true]) ->last(); } //daca exita cos de cumparaturi if ($cart) { $totalPriceCart = $this->Tools->totalPriceCart($cart); //verificare stock $cartItems = $this->Carts->CartProducts->find() ->contain('Products', 'Carts') ->where(['CartProducts.cart_id' => $cart->id]) ->toList(); foreach ($cartItems as $cartItem) { $stock = $cartItem->product->stock; $qnt = $cartItem['qnt']; // daca stocul este mai mic decat cantitatea selectata if ($stock < $qnt) { if ($stock < 1) { if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) { $cartIsUpdated = true; } $this->Flash->error(__('Ne pare rău, produsul {0} nu mai este în stoc.', $cartItem->product->name)); $this->redirect(['controller' => 'Orders', 'action' => 'summary']); return; } else { $this->loadModel('CartProducts'); $this->CartProducts->id = $cartItem->id; $this->CartProducts->saveField('qnt', $stock); $cartIsUpdated = true; $this->Flash->error(__('Ne pare rău, produsul {0} mai are doar {1} bucați.', $cartItem->product->name, $stock)); $this->redirect(['controller' => 'Orders', 'action' => 'summary']); return; } } } if ($this->request->is(['patch', 'post', 'put'])) { $this->loadComponent('MailHelp'); $data = $this->request->getData(); $cart = $this->Carts->find() ->contain([ 'Users', 'PaymentMethods', 'UserAddresses', 'UserAddresses.Counties', 'UserAddresses.Cities', 'CartProducts', 'CartProducts.Products', 'CartProducts.Products.UserAddresses', 'CartProducts.Products.UserAddresses.Counties', 'CartProducts.Products.UserAddresses.Cities' ]) ->where(['Carts.uuid' => $data['uuid'], 'Carts.is_active' => TRUE])->last(); # ##################################### # Insert value donation in causes `donation_sum` # ##################################### $orderDonations = []; if (!empty($cart->cart_products)) { foreach ($cart->cart_products as $i => $cartProduct) { $orderDonations[$i]['cause_id'] = $cartProduct->product->cause_id; $orderDonations[$i]['total_price'] = $cartProduct->qnt * (!empty($cartProduct->custom_price) ? $cartProduct->custom_price : $cartProduct->product->price); } } if ($orderDonations) { foreach ($orderDonations as $orderDonation) { $valueDonationSumOld = $this->fetchTable('Causes')->get($orderDonation['cause_id'])->donation_sum; $query = $this->fetchTable('Causes')->query(); $query->update() ->set(['donation_sum' => $valueDonationSumOld + $orderDonation['total_price']]) ->where(['id' => $orderDonation['cause_id']]) ->execute(); } } # ##################################### # Insert cart data in table Orders, update stock, Insert contact data in table AWBS, redirect payment # ##################################### $orderProducts = []; if (!empty($cart->cart_products)) { foreach ($cart->cart_products as $i => $cartProduct) { $orderProducts[$i]['product_id'] = $cartProduct->product_id; $orderProducts[$i]['product_user_id'] = $cartProduct->product->user_id; $orderProducts[$i]['product_name'] = $cartProduct->product->name; $orderProducts[$i]['qnt'] = $cartProduct->qnt; $orderProducts[$i]['price'] = !empty($cartProduct->custom_price) ? $cartProduct->custom_price : $cartProduct->product->price; $orderProducts[$i]['total_price'] = $cartProduct->qnt * (!empty($cartProduct->custom_price) ? $cartProduct->custom_price : $cartProduct->product->price); } } $dataOrder = [ 'user_id' => $cart->user_id, 'user_address_id' => $cart->user_address_id, 'payment_method_id' => $cart->payment_method_id, 'order_status_id' => STATUS_NEW, 'order_status_date' => date('Y-m-d H:s'), 'order_status_comment' => __('Comanda a fost creată.'), 'email' => $cart->user->email, 'total' => $totalPriceCart, 'notes' => $cart->notes, 'ip' => $this->request->clientIp(), 'order_products' => $orderProducts ]; if ($cart->uuid == $data['uuid']) { //update stock $this->loadModel('Products'); foreach ($orderProducts as $orderProduct) { $product = $this->Products->find() ->where(['id' => $orderProduct['product_id']]) ->first(); $this->Products->id = $orderProduct['product_id']; $this->Products->saveField('stock', $product->stock - $orderProduct['qnt']); } // save from cart to order and redirect to payment $order = $this->Orders->newEmptyEntity(); $order = $this->Orders->patchEntity($order, $dataOrder, ['associated' => ['OrderProducts']]); if ($this->Orders->save($order)) { $this->Carts->id = $cart->id; $this->Carts->saveField('order_id', $order->id); $this->Carts->saveField('is_active', FALSE); // Insert contact data in table AWBS $this->loadModel('Awbs'); $awbEmptyEntity = $this->Awbs->newEmptyEntity(); $dataAwb = []; $uniqueSenders = []; foreach ($cart->cart_products as $key => $cart_product) { if (!in_array($cart_product->product->user_id, $uniqueSenders)) { $dataAwb = [ 'order_id' => $order->id, 'courier_id' => '', # sender 'sender_user_id' => $cart_product->product->user_id, 'sender_first_name' => $cart_product->product->user_address->first_name, 'sender_last_name' => $cart_product->product->user_address->last_name, 'sender_phone' => $cart_product->product->user_address->phone, 'sender_county_name' => $cart_product->product->user_address->county->name, 'sender_city_name' => $cart_product->product->user_address->city->name, 'sender_str' => $cart_product->product->user_address->str, 'sender_nr' => $cart_product->product->user_address->nr, 'sender_bl' => $cart_product->product->user_address->bl, 'sender_sc' => $cart_product->product->user_address->sc, 'sender_ap' => $cart_product->product->user_address->ap, 'sender_interfon' => $cart_product->product->user_address->interfon, 'sender_postal_code' => $cart_product->product->user_address->postal_code, # recever 'recever_user_id' => $cart->user_id, 'recever_first_name' => $cart->user_address->first_name, 'recever_last_name' => $cart->user_address->last_name, 'recever_phone' => $cart->user_address->phone, 'recever_county_name' => $cart->user_address->county->name, 'recever_city_name' => $cart->user_address->city->name, 'recever_str' => $cart->user_address->str, 'recever_nr' => $cart->user_address->nr, 'recever_bl' => $cart->user_address->bl, 'recever_sc' => $cart->user_address->sc, 'recever_ap' => $cart->user_address->ap, 'recever_interfon' => $cart->user_address->interfon, 'recever_postal_code' => $cart->user_address->postal_code, ]; try { $awbEmptyEntity = $this->Awbs->newEmptyEntity(); $awb = $this->Awbs->patchEntity($awbEmptyEntity, $dataAwb); if ($this->Awbs->save($awb)) { $uniqueSenders[] = $cart_product->product->user_id; } else { debug($awb->getErrors()); } } catch (\Exception $ex) { $this->Flash->error(__('Ne pare rău, a intervenit o eroare. Vă rugăm să încercați din nou.')); } } } try { $to['email'] = $cart->user->email; $oLink = Router::url(['prefix' => false, 'controller' => 'Orders', 'action' => 'viewOrder', $order->uuid], true); $order = $order; $orderUuid = $order->uuid; $this->MailHelp->sendOrder($to, $oLink, $order, $orderUuid); } catch (\Exception $e) { //$this->Flash->error($e->getMessage()); $this->Flash->error(__('Comanda nu a putut fi trimisa pe email')); } if ($cart->payment_method_id == PAYMENT_METHOD_CARD) { return $this->redirect(['controller' => 'Payments', 'action' => 'payment', '?' => ['orderId' => $order->uuid]]); } return $this->redirect(['controller' => 'Orders', 'action' => 'viewOrder', $order->uuid]); } } else { $this->Flash->error(__('Ne pare rău, a intervenit o eroare. Vă rugăm să încercați din nou.')); } } $this->set(compact('cart', 'totalPriceCart')); } else { return $this->redirect(['controller' => 'Carts', 'action' => 'view']); } } /** * viewOrder */ public function viewOrder($uuid) { $order = null; if (!empty($uuid)) { $order = $this->Orders->find() ->contain([ 'OrderStatuses', 'UserAddresses', 'OrderProducts', 'OrderProducts.Products', 'PaymentMethods', 'Awbs' ]) ->where(['Orders.uuid' => $uuid]) ->first(); } else { $this->Flash->error(__('A apărut o problemă. Vă rugăm să încercați din nou')); } $this->set(compact('order')); } }