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

92 lines
3.1 KiB
PHP

<?php
namespace App\Controllers\Admin;
use App\Entities\BillingEntity;
use App\Models\BillingModel;
use App\Models\OrderBillingModel;
use App\Models\OrderModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class BillingController extends AdminController
{
private $_orderBillingModel = null;
private $_orderModel = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
$this->_model = new BillingModel();
$this->_viewDatas['className'] = 'Billing';
$this->_viewPath .= strtolower($this->_viewDatas['className']);
$this->_viewDatas['title'] = lang($this->_viewDatas['className'] . '.title');
$this->_viewDatas['class_icon'] = CLASS_ICONS[strtoupper($this->_viewDatas['className'])];
helper($this->_viewDatas['className']);
}
final protected function getOrderModel(): OrderModel
{
return $this->_orderModel = $this->_orderModel ?: new OrderModel();
}
final protected function getOrderBillingModel(): OrderBillingModel
{
return $this->_orderBillingModel = $this->_orderBillingModel ?: new OrderBillingModel();
}
public function getFields(string $action = ""): array
{
switch ($action) {
case "insert":
return ["price"];
break;
case "index":
case "excel":
return ["user_uid", "title", "price", "email", "phone", "status", "updated_at", "created_at"];
break;
case "view":
return ["user_uid", "title", "price", "email", "phone", "status", "updated_at", "created_at", 'response'];
break;
default:
return [];
break;
}
}
public function getFieldFilters(): array
{
return ["user_uid", "status"];
}
public function getFieldBatchFilters(): array
{
return ["user_uid", "status"];
}
final protected function getOrdersByBillingEntity(BillingEntity $entity): array
{
//청구서 연결 주문정보 가져오기
$orderBillings = $this->getOrderBillingModel()->getEntitys(['billing_uid' => $entity->getPrimaryKey()]);
$orders = array();
foreach ($orderBillings as $orderBilling) {
array_push(
$orders,
$this->getOrderModel()->getEntity(
[$this->getOrderModel()->getPrimaryKey() => $orderBilling->order_uid]
)
);
}
return $orders;
}
//View 관련
protected function view_process($entity)
{
$entity = parent::view_process($entity);
//청구서 연결 주문정보 가져오기
$this->_viewDatas['orders'] = $this->getOrdersByBillingEntity($entity);
if (!count($this->_viewDatas['orders'])) {
throw new \Exception("해당하는 주문정보가 없습니다.");
}
return $entity;
}
}