214 lines
5.9 KiB
PHP
214 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace Hura8\Components\Customer\Model;
|
|
|
|
use Hura8\Interfaces\AppResponse;
|
|
use Hura8\Interfaces\iEntityModel;
|
|
use Hura8\System\Controller\UrlManagerController;
|
|
use Hura8\System\IDGenerator;
|
|
use Hura8\System\Model\aEntityBaseModel;
|
|
|
|
class CustomerGroupModel extends aEntityBaseModel implements iEntityModel
|
|
{
|
|
|
|
protected $tb_customer_per_group = "tb_customer_per_group";
|
|
|
|
public function __construct() {
|
|
parent::__construct('customer_group');
|
|
}
|
|
|
|
|
|
public function updateItemCount($group_id) {
|
|
$this->db->runQuery(
|
|
"UPDATE `".$this->tb_entity."` SET
|
|
`customer_count` = (SELECT COUNT(*) AS total FROM `".$this->tb_customer_per_group."` WHERE `group_id` = ? )
|
|
WHERE `id` = ? LIMIT 1
|
|
",
|
|
['d', 'd'], [$group_id, $group_id]
|
|
);
|
|
}
|
|
|
|
|
|
public function getTotalCustomer($group_id, array $condition = [])
|
|
{
|
|
$query = $this->db->runQuery(
|
|
" SELECT COUNT(*) as total FROM `".$this->tb_customer_per_group."` WHERE `group_id` = ? ",
|
|
['d'], [$group_id]
|
|
);
|
|
|
|
$total = 0;
|
|
if ($rs = $this->db->fetchAssoc($query)) {
|
|
$total = $rs['total'];
|
|
}
|
|
|
|
return $total;
|
|
}
|
|
|
|
|
|
public function getListCustomer($group_id, array $condition = [])
|
|
{
|
|
$numPerPage = (isset($condition['numPerPage']) && $condition['numPerPage'] > 0 ) ? intval($condition['numPerPage']) : 20 ;
|
|
$page = (isset($condition['page']) && $condition['page'] > 0 ) ? intval($condition['page']) : 1 ;
|
|
$order_by = " `id` DESC";
|
|
|
|
$query = $this->db->runQuery(
|
|
"SELECT `customer_id` FROM ".$this->tb_customer_per_group." WHERE `group_id` = ?
|
|
ORDER BY ".$order_by."
|
|
LIMIT ".(($page-1) * $numPerPage).", ".$numPerPage ,
|
|
['d'], [$group_id]
|
|
) ;
|
|
|
|
$item_list_ids = array_map(function ($item){ return $item['customer_id'];}, $this->db->fetchAll($query));
|
|
|
|
$objCustomerModel = new CustomerModel();
|
|
$list_info = $objCustomerModel->getListByIds($item_list_ids);
|
|
|
|
// final list
|
|
$final_list = [];
|
|
foreach ($item_list_ids as $_id) {
|
|
$final_list[] = $list_info[$_id] ?? null;
|
|
}
|
|
|
|
return $final_list;
|
|
}
|
|
|
|
|
|
public function removeCustomerFromAllGroup($customer_id)
|
|
{
|
|
$this->db->runQuery(
|
|
"DELETE FROM `".$this->tb_customer_per_group."` WHERE `customer_id` = ?",
|
|
['d'], [$customer_id]
|
|
);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
public function removeCustomer($customer_id, $group_id)
|
|
{
|
|
$this->db->runQuery(
|
|
"DELETE FROM `".$this->tb_customer_per_group."` WHERE `group_id` =? AND `customer_id` = ? LIMIT 1 ",
|
|
['d', 'd'],
|
|
[$group_id, $customer_id]
|
|
);
|
|
|
|
$this->updateItemCount($group_id);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
public function addCustomer($customer_id, $group_id)
|
|
{
|
|
$query = $this->db->runQuery(
|
|
" SELECT * FROM `".$this->tb_customer_per_group."` WHERE `group_id` = ? AND `customer_id` = ? LIMIT 1 ",
|
|
['d', 'd'],
|
|
[$group_id, $customer_id]
|
|
);
|
|
|
|
if ($this->db->fetchAssoc($query)) {
|
|
return false;
|
|
}
|
|
|
|
$this->db->insert(
|
|
$this->tb_customer_per_group,
|
|
[
|
|
"group_id" => $group_id,
|
|
"customer_id" => $customer_id,
|
|
]
|
|
);
|
|
|
|
$this->updateItemCount($group_id);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
protected function _buildQueryConditionExtend(array $filter_condition): ?array
|
|
{
|
|
/*$condition = array(
|
|
"q" => "",
|
|
"status" => 0,
|
|
);*/
|
|
|
|
$catCondition = [];
|
|
$bind_types = [];
|
|
$bind_values = [];
|
|
|
|
return array( join(" ", $catCondition), $bind_types, $bind_values);
|
|
}
|
|
|
|
|
|
protected function beforeCreateItem(array $input_info) : AppResponse
|
|
{
|
|
$info = $input_info;
|
|
|
|
if(!$info['group_code']) $info['group_code'] = $info['title'];
|
|
$info['group_code'] = $this->createUniqueCode(0, $info['group_code']);
|
|
|
|
$info['create_time'] = CURRENT_TIME;
|
|
$info['create_by'] = ADMIN_NAME;
|
|
|
|
return new AppResponse('ok', null, $info);
|
|
}
|
|
|
|
|
|
protected function afterCreateItem($new_item_id, $new_item_info)
|
|
{
|
|
|
|
}
|
|
|
|
protected function beforeUpdateItem($item_id, $current_item_info, $new_input_info): AppResponse
|
|
{
|
|
$info = $new_input_info;
|
|
|
|
if(isset($info['group_code'])) {
|
|
if(!$info['group_code']) $info['group_code'] = $info['title'];
|
|
$info['group_code'] = $this->createUniqueCode($item_id, $info['group_code']);
|
|
}
|
|
|
|
$info['last_update'] = CURRENT_TIME;
|
|
$info['last_update_by'] = ADMIN_NAME;
|
|
|
|
return new AppResponse('ok', null, $info);
|
|
}
|
|
|
|
|
|
protected function createUniqueCode($current_item_id, $wanted_code){
|
|
|
|
$clean_code = UrlManagerController::create_url_index($wanted_code);
|
|
|
|
//if exist and belong other id, create a new one
|
|
$query = $this->db->runQuery("SELECT `id` FROM `".$this->tb_entity."` WHERE `group_code` = ? LIMIT 1 ", ['s'], [$clean_code]) ;
|
|
if($info = $this->db->fetchAssoc($query)){
|
|
if($info['id'] != $current_item_id) {
|
|
$new_code = $clean_code."-".IDGenerator::createStringId(3);
|
|
return $this->createUniqueCode($current_item_id, $new_code);
|
|
}
|
|
}
|
|
|
|
return $clean_code;
|
|
}
|
|
|
|
|
|
protected function afterUpdateItem($item_id, $old_item_info, $new_item_info)
|
|
{
|
|
|
|
}
|
|
|
|
protected function beforeDeleteItem($item_id, $item_info) : AppResponse
|
|
{
|
|
return new AppResponse('ok');
|
|
}
|
|
|
|
protected function afterDeleteItem($item_id, $item_info)
|
|
{
|
|
|
|
}
|
|
|
|
protected function extendedFilterOptions(): array
|
|
{
|
|
return [];
|
|
}
|
|
}
|