/var/www/vhosts/ihelp.ro/httpdocs/src/Controller
Edit: /var/www/vhosts/ihelp.ro/httpdocs/src/Controller/CartsController.bk.php (30228B)
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(['add', 'index', 'view', 'edit', 'delete', 'editCustomPrice']);
}
/**
* View method
*/
public function view()
{
// daca este user logat
if (!empty($this->userAuth->id) && $this->userAuth->id) {
$cart = $this->Carts->find('all')
->contain(['CartProducts'])
->where(['user_id' => $this->userAuth->id, 'Carts.is_active' => true])
->last();
//daca exita cos de cumparaturi
if ($cart) {
$cartItems = $this->Carts->CartProducts->find()
->contain(['Products', 'Products.FeaturedImage'])
->where(['CartProducts.cart_id' => $cart->id])
->toList();
$totalPriceCart = $this->Tools->totalPriceCart($cart);
$cartIsUpdated = false;
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));
} 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));
}
}
}
// daca avem cart id corect si produse cu stoc
$cartItemsCount = $this->Carts->CartProducts->find()
->contain(['Products', 'Products.FeaturedImage'])
->where(['CartProducts.cart_id' => $cart->id, 'Products.stock >' => 0])
->count();
// daca nu sunt produse in cos, stergem cosul
if ($cartItemsCount < 1) {
$this->Carts->delete($cart);
}
if ($cartIsUpdated) {
return $this->redirect($this->referer());
}
$this->set(compact('cartItems', 'totalPriceCart', 'cart'));
} else {
//$this->Flash->error( __( 'Nu sunt produse in cos' ) );
}
} else {
// nu este logat
$cart_identifier = $this->identifireIdCartSession();
$cart = $this->Carts->find('all')
->contain('CartProducts')
->where(['uuid' => $cart_identifier, 'Carts.is_active' => true])
->last();
//daca exita cos de cumparaturi
if ($cart) {
$cartItems = $this->Carts->CartProducts->find()
->contain(['Products', 'Products.FeaturedImage'])
->where(['CartProducts.cart_id' => $cart->id])
->toList();
$totalPriceCart = $this->Tools->totalPriceCart($cart);
$cartIsUpdated = false;
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));
} 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));
}
}
}
// daca avem cart id corect si produse cu stoc
$cartItemsCount = $this->Carts->CartProducts->find()
->contain('Products')
->where(['CartProducts.cart_id' => $cart->id, 'Products.stock >' => 0])
->count();
// daca nu sunt produse in cos, stergem cosul
if ($cartItemsCount < 1) {
$this->Carts->delete($cart);
}
if ($cartIsUpdated) {
return $this->redirect($this->referer());
}
$this->set(compact('cartItems', 'totalPriceCart', 'cart'));
} else {
//$this->Flash->error( __( 'Nu sunt produse in cos' ) );
}
}
}
/**
* editCustomPrice method
*/
public function editCustomPrice()
{
$response = [];
$this->autoRender = false;
if ($this->request->is('ajax')) { // daca exista cart
$data = $this->request->getData();
// condition if is login
$conditions = [];
if (!empty($this->userAuth->id) && $this->userAuth->id) {
$conditions = ['Carts.is_active' => true, 'Carts.user_id' => $this->userAuth->id];
} else { // condition if is not login
$cart_identifier = $this->identifireIdCartSession();
$conditions = ['Carts.is_active' => true, 'Carts.uuid' => $cart_identifier];
}
$cart = $this->Carts->find()
->where($conditions)
->first();
$this->loadModel('Products');
$product = $this->Products->find()
->where(['Products.uuid' => $data['uuidProduct'], 'Products.is_active' => true])
->first();
if (!empty($cart) && !empty($product)) {
$this->loadModel('CartProducts');
$cart_product = $this->CartProducts->find()
->where(['CartProducts.cart_id' => $cart->id, 'CartProducts.product_id' => $product->id])
->first();
// adauga produsul in tabela cartProducts
$custom_price = [
'custom_price' => $data['customPrice']
];
// $cartItemEntity = $this->CartProducts->newEmptyEntity();
$cartItemEntity = $this->CartProducts->patchEntity($cart_product, $custom_price);
if ($this->CartProducts->save($cartItemEntity)) {
$response['code'] = 200;
$response['message'] = __('Prețul a fost mofificatt.');
} else {
$response['message'] = __('Prețul nu a fost mofificat');
}
} else { // daca nu exista cart
$new_custom_price = [
'uuid' => $data['uuidProduct'],
'custom_price' => Number::format($data['customPrice'], ['precision' => 0])
];
$session = $this->request->getSession();
if ($session->check('custom_prices')) {
$custom_prices = $session->read('custom_prices');
$uuids = [];
foreach ($custom_prices as $k => $custom_price) {
$uuids[] = $custom_price['uuid'];
}
if (!in_array($data['uuidProduct'], $uuids)) {
$session->write(
'custom_prices',
array_merge($custom_prices, [$new_custom_price])
);
} else {
foreach ($custom_prices as $k => $custom_price) {
$session->write(
'custom_prices.' . $k . '.custom_price',
$new_custom_price['custom_price']
);
}
}
} else {
$session->write('custom_prices', [$new_custom_price]);
}
//$session->destroy('custom_prices');
$response['code'] = 200;
$response['message'] = __('Prețul a fost mofificat.');
}
} else {
die;
}
echo json_encode($response);
die;
}
/**
* Add method
*/
public function add($uuid = false)
{
if ($this->request->is(['patch', 'post', 'put'])) {
$formData = $this->request->getData();
if (!empty($formData['uuid'])) {
$uuid = $formData['uuid'];
$this->loadModel('Products');
$product = $this->Products->find('all')
->where(['Products.uuid' => $uuid, 'Products.is_active' => true])->first();
if ($product) {
if ($product->stock >= 1) {
if (!empty($this->userAuth->id) && $this->userAuth->id) {
$cart = $this->Carts->find('all')
->where(['Carts.user_id' => $this->userAuth->id, 'Carts.is_active' => true])
->last();
if (!$cart) {
//creare intrare in tabela cart daca user este auth si nu exista in cart
$cart = $this->Carts->newEmptyEntity();
$cartData = [
'uuid' => $this->Tools->generateUUID(),
'user_id' => $this->userAuth->id
];
//salveaza intrarea in tabela cart
$cart = $this->Carts->patchEntity($cart, $cartData);
if ($this->Carts->save($cart)) {
$this->loadModel('CartProducts');
$cartItemEntity = $this->CartProducts->newEmptyEntity();
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$cartItem = [
'cart_id' => $cart->id,
'product_id' => $product->id,
'qnt' => 1,
'custom_price' => $custom_price,
];
// adauga produsul in tabela cartProducts
$cartItemEntity = $this->CartProducts->patchEntity($cartItemEntity, $cartItem);
if ($this->CartProducts->save($cartItemEntity)) {
$session = $this->request->getSession();
if ($session->check('custom_prices')) {
}
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
}
}
} else {
$this->loadModel('CartProducts');
$cartProduct = $this->CartProducts->find('all')
->where(['CartProducts.cart_id' => $cart->id, 'CartProducts.product_id' => $product->id])
->first();
if ($cartProduct) {
if ($product->stock > $cartProduct['qnt']) {
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$this->CartProducts->id = $cartProduct->id;
$this->CartProducts->saveField('qnt', $cartProduct['qnt'] + 1);
$this->CartProducts->saveField('custom_price', $custom_price);
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
} else {
$this->Flash->error(__('Ne pare rău, stoc insuficient.'));
return $this->redirect($this->referer());
}
} else {
$cartItemEntity = $this->CartProducts->newEmptyEntity();
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$cartItem = [
'cart_id' => $cart->id,
'product_id' => $product->id,
'qnt' => 1,
'custom_price' => $custom_price,
];
// add product in cart
$cartItemEntity = $this->CartProducts->patchEntity($cartItemEntity, $cartItem);
if ($this->CartProducts->save($cartItemEntity)) {
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
}
}
}
$cart = $this->Carts->newEmptyEntity();
if ($this->request->is('post')) {
$cart = $this->Carts->patchEntity($cart, $this->request->getData());
if ($this->Carts->save($cart)) {
$this->Flash->success(__('The cart has been saved.'));
return $this->redirect(['controller' => 'Carts', 'action' => 'index']);
}
$this->Flash->error(__('The cart could not be saved. Please, try again.'));
}
$this->set(compact('cart'));
} else {
// nu este logat
$cart_identifier = $this->identifireIdCartSession();
$cart = $this->Carts->find('all')
->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true])
->last();
if (!$cart) {
//creare intrare in tabela cart daca user este auth si nu exista in cart
$cart = $this->Carts->newEmptyEntity();
$cartData = [
'uuid' => $cart_identifier,
'user_id' => null
];
//salveaza intrarea in tabela cart
$cart = $this->Carts->patchEntity($cart, $cartData);
if ($this->Carts->save($cart)) {
$this->loadModel('CartProducts');
$cartItemEntity = $this->CartProducts->newEmptyEntity();
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$cartItem = [
'cart_id' => $cart->id,
'product_id' => $product->id,
'qnt' => 1,
'custom_price' => $custom_price,
];
// adauga produsul in tabela cartProducts
$cartItemEntity = $this->CartProducts->patchEntity($cartItemEntity, $cartItem);
if ($this->CartProducts->save($cartItemEntity)) {
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
}
}
} else {
$this->loadModel('CartProducts');
$cartProduct = $this->CartProducts->find('all')
->where(['CartProducts.cart_id' => $cart->id, 'CartProducts.product_id' => $product->id])
->first();
if ($cartProduct) {
if ($product->stock > $cartProduct['qnt']) {
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$this->CartProducts->id = $cartProduct->id;
$this->CartProducts->saveField('qnt', $cartProduct['qnt'] + 1);
$this->CartProducts->saveField('custom_price', $custom_price);
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
} else {
$this->Flash->error(__('Ne pare rău, stoc insuficient'));
return $this->redirect($this->referer());
}
} else {
$cartItemEntity = $this->CartProducts->newEmptyEntity();
$custom_price = NULL;
if (!$product->is_price_fixed) {
if (!empty($formData['custom_price']) && $formData['custom_price'] > $product->min_price) {
$custom_price = $formData['custom_price'];
} else {
$this->Flash->error(__('Pretul introdus este mai mic decat pretul minim recomandat.'));
return $this->redirect($this->referer());
}
}
$cartItem = [
'cart_id' => $cart->id,
'product_id' => $product->id,
'qnt' => 1,
'custom_price' => $custom_price,
];
// add product in cart
$cartItemEntity = $this->CartProducts->patchEntity($cartItemEntity, $cartItem);
if ($this->CartProducts->save($cartItemEntity)) {
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
}
}
}
$cart = $this->Carts->newEmptyEntity();
if ($this->request->is('post')) {
$cart = $this->Carts->patchEntity($cart, $this->request->getData());
if ($this->Carts->save($cart)) {
$this->Flash->success(__('The cart has been saved.'));
return $this->redirect(['controller' => 'Carts', 'action' => 'index']);
}
$this->Flash->error(__('Coșul nu a putut fi salvat. Încercați din nou!'));
}
$this->set(compact('cart'));
$this->Flash->success(__('Produsul tău a fost adăugat în coș.'));
return $this->redirect($this->referer());
//$session->delete( 'products_cart' );
}
} else {
$this->Flash->error(__('Ne pare rău, produsul nu mai este în stoc (1)'));
return $this->redirect($this->referer());
}
} else {
$this->Flash->error(__('Ne pare rău, produsul nu mai este în stoc (2)'));
return $this->redirect($this->referer());
}
} else {
$this->Flash->error(__('A intervenit o eroare. Produsul nu a fost gasit'));
return $this->redirect($this->referer());
}
} else {
$this->Flash->error(__('A intervenit o eroare. Produsul nu a fost gasit'));
return $this->redirect($this->referer());
}
}
/**
* Edit method
*/
public function edit()
{
$response = ['error' => true, 'msg' => 'A intervenit o eroare', 'forceRedir' => false];
if ($this->request->is(['patch', 'post', 'put'])) {
if (!empty($this->userAuth->id) && $this->userAuth->id) {
$data = $this->request->getData();
$this->loadModel('CartProducts');
$cartProduct = $this->CartProducts->find('all')
->contain('Products')
->where(['CartProducts.id' => $data['id']])
->first();
if ($cartProduct) {
if ($cartProduct->product->stock >= $data['qnt']) {
$this->CartProducts->id = $cartProduct->id;
$this->CartProducts->saveField('qnt', $data['qnt']);
$response = ['error' => false, 'msg' => 'Cosul a fost actualizat cu succes', 'forceRedir' => false];
} else {
$response = ['error' => true, 'msg' => 'Ne pare rău, stoc insuficient', 'forceRedir' => true];
}
}
} else {
// nu este logat
$cart_identifier = $this->identifireIdCartSession();
$cart = $this->Carts->find('all')
->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true])
->first();
if ($cart) {
$data = $this->request->getData();
$this->loadModel('CartProducts');
$cartProduct = $this->CartProducts->find('all')
->contain('Products')
->where(['CartProducts.id' => $data['id']])
->first();
if ($cartProduct) {
if ($cartProduct->product->stock >= $data['qnt']) {
$this->CartProducts->id = $cartProduct->id;
$this->CartProducts->saveField('qnt', $data['qnt']);
$response = ['error' => false, 'msg' => 'Cosul a fost actualizat cu succes', 'forceRedir' => false];
} else {
$response = ['error' => true, 'msg' => 'Ne pare rău, stoc insuficient', 'forceRedir' => true];
}
}
}
}
}
echo json_encode($response);
die();
}
/**
* Delete method
*/
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
if (!empty($this->userAuth->id) && $this->userAuth->id) {
$cartItem = $this->Carts->CartProducts->find('all')
->contain('Carts')
->where(['CartProducts.id' => $id, 'Carts.user_id' => $this->userAuth->id])
->first();
if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) {
$cartItemsCount = $this->Carts->CartProducts->find()
->where(['CartProducts.cart_id' => $cartItem->cart->id])
->count();
if ($cartItemsCount < 1) {
$this->Carts->delete($cartItem->cart);
}
$this->Flash->success(__('Produsul a fost șters din coș.'));
} else {
$this->Flash->error(__('Produsul nu a fost șters din coș.'));
}
} else {
// nu este logat
$cart_identifier = $this->identifireIdCartSession();
$cartItem = $this->Carts->CartProducts->find('all')
->contain('Carts')
->where(['CartProducts.id' => $id, 'Carts.uuid' => $cart_identifier])
->first();
if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) {
$cartItemsCount = $this->Carts->CartProducts->find()
->where(['CartProducts.cart_id' => $cartItem->cart->id])
->count();
if ($cartItemsCount < 1) {
$this->Carts->delete($cartItem->cart);
}
$this->Flash->success(__('Produsul a fost sters din cos.'));
} else {
$this->Flash->error(__('Produsul nu a fost sters din cos.'));
}
}
return $this->redirect($this->referer());
}
}