From 8d1c3639d4324d264d72c1f78783e99f70e167f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0git=20config=20git=20config=20-?= =?UTF-8?q?-helpgit=20config=20--global=20user=2Ename=20=EC=B5=9C=EC=A4=80?= =?UTF-8?q?=ED=9D=A0?= Date: Sun, 13 Aug 2023 17:45:55 +0900 Subject: [PATCH] shoppingmallv2 init... --- app/Controllers/BaseController.php | 2 +- .../Front/Order/CartController.php | 49 ++++++++++++------- app/Helpers/Order_helper.php | 33 +++++++------ app/Language/ko/Cart.php | 9 ++++ app/Language/ko/Order.php | 6 ++- app/Models/BaseModel.php | 8 +-- app/Models/OrderModel.php | 20 -------- app/Models/ProductModel.php | 14 +++--- 8 files changed, 75 insertions(+), 66 deletions(-) create mode 100644 app/Language/ko/Cart.php diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index f4d2354..122d614 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -519,7 +519,7 @@ abstract class BaseController extends Controller $this->_viewDatas['word'] = $this->request->getVar('word') ?: ''; $this->_viewDatas['start'] = $this->request->getVar('start') ?: ''; $this->_viewDatas['end'] = $this->request->getVar('end') ?: ''; - $this->_viewDatas['order_field'] = $this->request->getVar('order_field') ?: 'uid'; + $this->_viewDatas['order_field'] = $this->request->getVar('order_field') ?: 'created_at'; $this->_viewDatas['order_value'] = $this->request->getVar('order_value') ?: 'DESC'; $this->_model->setCondition( $filterFields, diff --git a/app/Controllers/Front/Order/CartController.php b/app/Controllers/Front/Order/CartController.php index ddf7822..6104fbe 100644 --- a/app/Controllers/Front/Order/CartController.php +++ b/app/Controllers/Front/Order/CartController.php @@ -29,7 +29,7 @@ class CartController extends OrderController public function getFields(string $action = ""): array { switch ($action) { - case 'update': + case 'insert': return ["product_uid", "quantity", "price"]; break; default: @@ -40,10 +40,12 @@ class CartController extends OrderController protected function getFieldRule(string $field, array $rules, string $action = ""): array { switch ($field) { - case "product_uid": - case "quantity": - case "price": - $rules = $this->_model->getFieldRule($field, $rules, $action); + case 'product_uid': + $rules[$field] = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]"; + break; + case 'quantity': + case 'price': + $rules[$field] = "required|numeric"; break; default: $rules = parent::getFieldRule($field, $rules, $action); @@ -60,14 +62,28 @@ class CartController extends OrderController return parent::getFieldBatchFilters(); } - //주문(장바구니담기) + protected function insert_process() + { + //addCart용 데이터 재처리 작업 + $orderFormDatas = []; + $orderFormDatas[$this->_model->getTitleField()] = $this->_viewDatas['fieldDatas'][$this->_model->getTitleField()]; + $orderFormDatas['product_uid'] = $this->_viewDatas['fieldDatas']['product_uid']; + $orderFormDatas['cost'] = $this->_viewDatas['fieldDatas']['price']; + $orderFormDatas['sale'] = 0; + $orderFormDatas['quantity'] = $this->_viewDatas['fieldDatas']['quantity']; + $orderFormDatas['price'] = $orderFormDatas['cost'] * $orderFormDatas['quantity']; + $this->_viewDatas['fieldDatas'] = $orderFormDatas; + // echo var_export($this->_viewDatas['fieldDatas']); + // exit; + return parent::insert_process(); + } + + //주문(uid->product_uid) public function insert() { $msg = ""; try { $this->_viewDatas = $this->init(__FUNCTION__); - //Transaction 시작 - $this->_model->transStart(); //장바구니정보 검증 $this->insert_validate(); //상품정보 가져오기 @@ -81,12 +97,13 @@ class CartController extends OrderController if ($price != $this->_viewDatas['fieldDatas']['price']) { throw new \Exception("실 상품금액{$price} 와 구매금액{$this->_viewDatas['fieldDatas']['price']}이 서로 다릅니다."); } - // echo var_export($this->_viewDatas['fieldDatas']); - // exit; //상품명을 복사해서 구매한 상품명에 넣기 $this->_viewDatas['fieldDatas'][$this->_model->getTitleField()] = $product->getTitle(); + + //Transaction 시작 + $this->_model->transStart(); //주문추가 - $entity = $this->_model->addCart($this->_viewDatas['fieldDatas']); + $entity = $this->insert_process(); //상품재고감소 $product = $this->getProductModel()->addCart($product, $this->_viewDatas['fieldDatas']['quantity']); //주문정보 세션에 넣기 @@ -124,16 +141,12 @@ class CartController extends OrderController try { //주문정보 가져오기 $entity = $this->_model->getEntity([$this->_model->getPrimaryKey() => $uid]); + //상품정보 가져오기 + $product = $this->getProductModel()->getEntity([$this->getProductModel()->getPrimaryKey() => $entity->product_uid]); //Transaction 시작 $this->_model->transStart(); //주문취소 - if (!$this->_model->cancelCart($entity)) { - log_message("error", __FUNCTION__ . "에서 호출:" . $this->_model->getLastQuery()); - log_message("error", implode("\n", $this->_model->errors())); - throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->_model->errors(), true)); - } - //상품정보 가져오기 - $product = $this->getProductModel()->getEntity([$this->getProductModel()->getPrimaryKey() => $entity->product_uid]); + $entity = $this->_model->modify($entity, ['status' => 'unuse']); //상품반환 $product = $this->getProductModel()->cancelCart($product, $entity->quantity); //주문정보 세션에서 빼기 diff --git a/app/Helpers/Order_helper.php b/app/Helpers/Order_helper.php index d3a0b7d..0f3cdb6 100644 --- a/app/Helpers/Order_helper.php +++ b/app/Helpers/Order_helper.php @@ -127,27 +127,27 @@ function getFieldIndex_Row_OrderHelper($field, $entity, array $viewDatas): strin switch ($field) { case 'title': case 'name': - return anchor( + $uid = lang("{$viewDatas['className']}.label.uid") . ' : ' . str_split($entity->getPrimaryKey(), 4)[0] . '-xx-' . str_split($entity->getPrimaryKey(), 4)[1]; + $title = anchor( current_url() . '/view/' . $entity->getPrimaryKey() . '?category=' . $viewDatas['category']->getPrimaryKey(), $value, ["target" => "_self"] ); + return sprintf("%s
%s", $uid, $title); break; case 'status': if ($value == DEFAULTS['STATUS']) { - return sprintf( - "
%s
%s
", - anchor( - URLS['cardPayment'] . '/' . $entity->getPrimaryKey(), - ICONS['CARD'] . " 카 드 결 제", - ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"] - ), - anchor( - URLS['depositPayment'] . '/' . $entity->getPrimaryKey(), - ICONS['DEPOSIT'] . " 무통장입금", - ["class" => "btn btn-sm btn-info btn-circle", "style" => "color:white", "target" => "_self"] - ) + $card = anchor( + URLS['cardPayment'] . '/' . $entity->getPrimaryKey(), + ICONS['CARD'] . lang("{$viewDatas['className']}.PAYMENT.CARD"), + ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"] ); + $deposit = anchor( + URLS['depositPayment'] . '/' . $entity->getPrimaryKey(), + ICONS['DEPOSIT'] . lang("{$viewDatas['className']}.PAYMENT.DEPOSIT"), + ["class" => "btn btn-sm btn-info btn-circle", "style" => "color:white", "target" => "_self"] + ); + return sprintf("%s
%s", $card, $deposit); } else { return getFieldView_OrderHelper($field, $entity, $viewDatas); } @@ -164,11 +164,16 @@ function getFieldIndex_Row_OrderHelper_Admin($field, $entity, array $viewDatas): switch ($field) { case 'title': case 'name': - return anchor( + $uid = lang("{$viewDatas['className']}.label.uid") . ' : ' . str_split($entity->getPrimaryKey(), 4)[0] . '-xx-' . str_split($entity->getPrimaryKey(), 4)[1]; + $title = anchor( current_url() . '/view/' . $entity->getPrimaryKey(), $value, ["target" => "_self"] ); + return sprintf("%s
%s", $uid, $title); + break; + case 'user_uid': + return getFieldView_OrderHelper($field, $entity, $viewDatas); break; default: if (in_array($field, $viewDatas['fieldFilters'])) { diff --git a/app/Language/ko/Cart.php b/app/Language/ko/Cart.php new file mode 100644 index 0000000..96e4192 --- /dev/null +++ b/app/Language/ko/Cart.php @@ -0,0 +1,9 @@ + "장바구니", + 'label' => [ + 'product_uid' => '상품번호', + 'quantity' => '구매수량', + 'price' => '구매금액', + ], +]; diff --git a/app/Language/ko/Order.php b/app/Language/ko/Order.php index 4fe7da6..a290c5f 100644 --- a/app/Language/ko/Order.php +++ b/app/Language/ko/Order.php @@ -2,7 +2,7 @@ return [ 'title' => "주문 정보", 'label' => [ - 'uid' => "주문ID", + 'uid' => "주문번호", 'product_uid' => "상품정보", 'sess_id' => "세션ID", 'user_uid' => "사용자정보", @@ -22,5 +22,9 @@ return [ "Deposit" => "무통장입금", "Card" => "카드결제", "paid" => "결제완료" + ], + "PAYMENT" => [ + 'CARD' => " 카 드 결 제", + 'DEPOSIT' => " 무통장입금", ] ]; diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php index c5cf9a3..399d882 100644 --- a/app/Models/BaseModel.php +++ b/app/Models/BaseModel.php @@ -268,13 +268,9 @@ abstract class BaseModel extends Model $this->where("created_at <=", $end); } } - public function setIndexOrderBy(?string $field, ?string $order) + public function setIndexOrderBy(string $field, string $order) { - if ($this->useAutoIncrement) { - $this->orderBy($field ?: $this->primaryKey, $order ?: "DESC"); - } else { - $this->orderBy($field ?: "created_at", $order ?: "DESC"); - } + $this->orderBy($field, $order); } final public function setCondition(array $filterFields, $word, $start, $end, $order_field, $order_value) { diff --git a/app/Models/OrderModel.php b/app/Models/OrderModel.php index 1a5c9bc..2ea0827 100644 --- a/app/Models/OrderModel.php +++ b/app/Models/OrderModel.php @@ -84,24 +84,4 @@ class OrderModel extends BaseModel $this->orLike($this->getTitleField(), $word, "both"); } } - - //장바구니에 넣기 - public function addCart(array $formDatas): OrderEntity - { - $orderFormDatas = []; - $orderFormDatas[$this->getTitleField()] = $formDatas[$this->getTitleField()]; - $orderFormDatas['product_uid'] = $formDatas['product_uid']; - $orderFormDatas['cost'] = $formDatas['price']; - $orderFormDatas['sale'] = 0; - $orderFormDatas['quantity'] = $formDatas['quantity']; - $orderFormDatas['price'] = ($orderFormDatas['cost'] - $orderFormDatas['sale']) * $orderFormDatas['quantity']; - // echo var_export($orderFormDatas); - // exit; - return $this->create_process(new OrderEntity(), $orderFormDatas); - } - //장바구니에 빼기 - public function cancelCart(OrderEntity $entity) - { - return $this->delete($entity->getPrimaryKey()); - } } diff --git a/app/Models/ProductModel.php b/app/Models/ProductModel.php index 35a95c8..5296ce3 100644 --- a/app/Models/ProductModel.php +++ b/app/Models/ProductModel.php @@ -114,19 +114,21 @@ class ProductModel extends BaseModel //장바구니에 넣기(재고수량빼기) final public function addCart(ProductEntity $entity, int $quantity): ProductEntity { + $formDatas = array(); if ($entity->stock == $quantity) { - $entity->status = self::STATUS_OUTOFSTOCK; + $formDatas['status'] = self::STATUS_OUTOFSTOCK; } - $entity->stock -= $quantity; - return $this->save_process($entity); + $formDatas['stock'] = $entity->stock - $quantity; + return $this->modify($entity, $formDatas); } //장바구니에 빼기(재고수량더하기) public function cancelCart(ProductEntity $entity, int $quantity) { + $formDatas = array(); if ($entity->status == self::STATUS_OUTOFSTOCK) { - $entity->status = DEFAULTS['STATUS']; + $formDatas['status'] = DEFAULTS['STATUS']; } - $entity->stock += $quantity; - return $this->save_process($entity); + $formDatas['stock'] = $entity->stock + $quantity; + return $this->modify($entity, $formDatas); } }