vhost/app/Controllers/Trait/CartTrait.php
2024-05-07 13:20:45 +09:00

67 lines
2.6 KiB
PHP

<?php
namespace App\Controllers\Trait;
use App\Entities\OrderEntity;
use App\Entities\ProductEntity;
use App\Models\OrderModel;
use App\Models\ProductModel;
trait CartTrait
{
private $_serverModel = null;
private $_orderModel = null;
private function getOrderModel(): OrderModel
{
return $this->_orderModel = $this->_orderModel ?: new OrderModel();
}
private function getProductModel(): ProductModel
{
return $this->_serverModel = $this->_serverModel ?: new ProductModel();
}
public function add_procedure(ProductEntity $product, int $quantity, int $paymentDay = null): OrderEntity
{
//상품재고감소
$product = $this->getProductModel()->addCart($product, $quantity);
//주문추가
$entity = $this->getOrderModel()->addCart($product, $quantity, $product->type, $paymentDay);
//주문정보 세션에 넣기
$order_uids = $this->_session->get(SESSION_NAMES['CART']) ?: array();
$this->_session->set(SESSION_NAMES['CART'], [...$order_uids, $entity->getPrimaryKey()]);
$this->_session->setFlashdata(
"return_message",
sprintf(
"%s\n 상품명:%s\n 상품갯수:%s개, 구매금액:%s원\n 장바구니에 담았습니다.",
$this->_viewDatas['title'],
$entity->getTitle(),
$entity->quantity,
number_format($entity->price),
),
);
return $entity;
}
public function cancel_procedure($uid)
{
//주문정보 가져오기
$entity = $this->getOrderModel()->getEntity([$this->getOrderModel()->getPrimaryKey() => $uid]);
//상품정보 가져오기
$product = $this->getProductModel()->getEntity([$this->getProductModel()->getPrimaryKey() => $entity->product_uid]);
//주문취소
$entity = $this->getOrderModel()->cancelCart($entity);
//상품반환
$product = $this->getProductModel()->cancelCart($product, $entity->quantity);
//주문정보 세션에서 빼기
$order_uids = $this->_session->get(SESSION_NAMES['CART']) ?: array();
$temps = array();
foreach ($order_uids as $order_uid) {
if ($order_uid != $entity->getPrimaryKey()) {
array_push($temps, $order_uid);
}
}
$this->_session->set(SESSION_NAMES['CART'], $temps);
$this->_session->setFlashdata("return_message", "{$this->_viewDatas['title']}에서 {$entity->getTitle()} {$entity->quantity}개의 주문을 취소하였습니다.");
}
}