<?php
/**
 * 客户模块查询条件
 *
 * @author fanqi
 * @date 2021-03-09
 */

namespace app\crm\traits;

trait SearchConditionTrait
{
    /**
     * 联系人tab列表查询条件(权限)
     *
     * @param $userId 当前登录ID
     * @author fanqi
     * @date 2021-03-09
     * @return \Closure
     */
    public function getContactsSearchWhere($userId)
    {
        $userModel = new \app\admin\model\User();

        $authUserIds = $userModel->getUserByPer('crm', 'contacts', 'index');

        $authMapData['auth_user_ids'] = $authUserIds;
        $authMapData['user_id']       = $userId;

        return $this->getSearchAuthWhere($authMapData);
    }

    /**
     * 商机tab列表查询条件(权限)
     *
     * @param $userId 当前登录ID
     * @author fanqi
     * @date 2021-03-09
     * @return \Closure
     */
    public function getBusinessSearchWhere($userId)
    {
        $userModel = new \app\admin\model\User();

        $authUserIds = $userModel->getUserByPer('crm', 'business', 'index');

        $authMapData['auth_user_ids'] = $authUserIds;
        $authMapData['user_id']       = $userId;

        return $this->getSearchAuthWhere($authMapData);
    }

    /**
     * 合同tab列表查询条件(权限)
     *
     * @param $userId 当前登录ID
     * @author fanqi
     * @date 2021-03-09
     * @return \Closure
     */
    public function getContractSearchWhere($userId)
    {
        $userModel = new \app\admin\model\User();

        $authUserIds = $userModel->getUserByPer('crm', 'contract', 'index');

        $authMapData['auth_user_ids'] = $authUserIds;
        $authMapData['user_id']       = $userId;

        return $this->getSearchAuthWhere($authMapData);
    }

    /**
     * 回访tab列表查询条件(权限)
     *
     * @param $userId
     * @author fanqi
     * @date 2021-03-09
     * @return \Closure
     */
    public function getVisitSearchWhere($userId)
    {
        $userModel = new \app\admin\model\User();

        $authUserIds = $userModel->getUserByPer('crm', 'visit', 'index');

        $authMapData['auth_user_ids'] = $authUserIds;
        $authMapData['user_id']       = $userId;

        return $this->getSearchAuthWhere($authMapData);
    }

    /**
     * 回款tab列表查询条件(权限)
     *
     * @author fanqi
     * @date 2021-03-10
     * @return array[]
     */
    public function getReceivablesSearchWhere()
    {
        $userModel = new \app\admin\model\User();

        return $userModel->getUserByPer('crm', 'receivables', 'index');
    }

    /**
     * 发票tab列表查询条件
     *
     * @author fanqi
     * @date 2021-03-11
     * @return array|false|string
     */
    public function getInvoiceSearchWhere()
    {
        $userModel = new \app\admin\model\User();

        return $userModel->getUserByPer('crm', 'invoice', 'index');
    }

    /**
     * 产品tab列表查询条件
     *
     * @author fanqi
     * @date 2021-03-11
     * @return array|false|string
     */
    public function getProductSearchWhere()
    {
        $userModel = new \app\admin\model\User();

        return $userModel->getUserByPer('crm', 'product', 'index');
    }

    /**
     * 查询权限条件
     *
     * @param $authMapData 权限范围内的ID
     * @return \Closure
     */
    private function getSearchAuthWhere($authMapData)
    {
        return function($query) use ($authMapData) {
            $query->where(['owner_user_id' => ['in', $authMapData['auth_user_ids']]])
                ->whereOr(function ($query) use ($authMapData) {
                    $query->where('FIND_IN_SET("'.$authMapData['user_id'].'", ro_user_id)')->where(['owner_user_id' => ['neq', '']]);
                })
                ->whereOr(function ($query) use ($authMapData) {
                    $query->where('FIND_IN_SET("'.$authMapData['user_id'].'", rw_user_id)')->where(['owner_user_id' => ['neq', '']]);
                });
        };
    }
}