komer45/yii2-partnership

这是一个合作伙伴模块

安装: 57

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 0

开放问题: 0

类型:yii2-extension

dev-master 2017-02-04 12:55 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:03:52 UTC


README

这是一个实现合作伙伴程序的模块。通过合作伙伴网站转来的用户会被识别——如果用户未在系统中注册,则在转换时会记录为介绍该用户的合作伙伴。系统会追踪用户的订单活动——在订单完成后,合作伙伴会得到一定的百分比提成。当客户的订单提成达到一定金额时,合作伙伴可以提取自己的收入。为了在系统中识别合作伙伴,需要满足以下条件:1. 该合作伙伴必须在user表中,2. 应该成为合作伙伴的user表中的用户必须记录在ps_partner表中,3. 在ps_partner表中将用户识别为合作伙伴的字段partner_id应记录对应用户user表中的id字段的值。

功能

  • 注册跳转
  • 将到达的访客与带来访客的合作伙伴关联。
  • 对合作伙伴的订单提成进行计算。
  • 管理提成

安装

执行以下命令

php composer require komer45/yii2-partnership "*"

或者在composer.json中添加

"komer45/yii2-partnership": "*",

然后执行

php composer update

接下来,迁移数据库

php yii migrate --migrationPath=vendor/komer45/yii2-partnership/migrations

连接和配置

为了使用该模块,需要在配置中连接模块

	'modules' => [
		'partnership' => [
			'class' => 'komer45\partnership\Module',
			'adminRoles' => ['superadmin', 'administrator'],
		],
		//...
	]

为了在配置中访问组件,需要连接请求

	'components' => [
	...
		'partnership' => [
			'class' => 'komer45\partnership\Partnership'
		],
	...
	]

为了订阅购买事件,需要在配置中为order模块编写以下代码

<?php
...
'order' => [
		'class' => 'pistol88\order\Module',
		///...
		'on create' =>function($event) {
			$model = new \komer45\partnership\models\OrderHistory;
			$tmp =  strval(Yii::$app->request->cookies['tmp_user_id']);
			if (!Yii::$app->user->isGuest){             //сли пользователь зарегистрирован
				$model->user_id = Yii::$app->user->id;
				$follow = \komer45\partnership\models\Follow::find()->where(['user_id' => $model->user_id])->one();
				$part   = \komer45\partnership\models\Follow::find()->where(['user_id' => Yii::$app->user->id])->one();
			} else {                                    //иначе - если все-таки гость
				$model->tmp_user_id = $tmp;
				$follow = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => $model->tmp_user_id])->one();
				$part   = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => $tmp])->one();
			}
			if($part){
				$partner = \komer45\partnership\models\Partner::find()->where(['code' => $part->partner])->one(); //находим партнера по коду
				$model->partner_id = $partner->id;
			}
			$model->sum = $event->model->cost;
			$model->date = date('Y-m-d');
			$model->order_id = $event->model->id;
			if($follow){
				$model->follow_id = strval($follow->id);    //сюда нужно записать id таблицы ps_follow
			}
				$forperc = \komer45\partnership\models\Setting::find()->all();
				if($forperc){
					foreach ($forperc as $search)
					{
						if ($model->sum >= $search->sum)
						{
							$percent = (($model->sum)/100*$search->percent);
							break;
						}
					}
					$model->recoil = $percent;
				}
				$model->status = 'new';
			if ($model->validate())
			{
				$model->save();
			}   else {
					//die('Uh-oh something in config went wrong');
				}
		},
		//..
]

同样,为了在控制器user (\common\models\user)中将未注册的用户转换为注册用户,需要在方法afterSignup(array $profileData = [])中添加以下代码

<?php

public function afterSignup(array $profileData = [])
{
	$reFollow = \komer45\partnership\models\Follow::find()->where(['tmp_user_id' => Yii::$app->request->cookies['tmp_user_id']])->one();
	$reFollow->tmp_user_id = NULL;
	$reFollow->user_id = $this->getId();
	if ($reFollow->validate())
	{
		$reFollow->save();
	}
	//...
}

为了执行订单(客户)、请求提取(合作伙伴)、提取(管理员),可以连接小部件

<?php
use komer45\partnership\widgets\OrderWidget;			//Виджет заказа
use komer45\partnership\widgets\PartnerWidget;			//Виджет партнерства
use komer45\partnership\widgets\AdminWidget;			//Переход на вкладку администрирования
use komer45\partnership\widgets\SettingWidget;			//Переход на вкладку настроек
use komer45\partnership\widgets\PartnerOrdersWidget;	//"Мои отчисления", "Мои рефералы" 
?>
<?=OrderWidget::widget();?>
<?=PartnerWidget::widget();?>
<?=AdminWidget::widget();?>
<?=SettingWidget::widget();?>
<?=PartnerOrdersWidget::widget();?>

如果需要将此模块与钱包模块(komer45/yii2-balance)关联,可以订阅事件。在配置中修改modules部分的partnership连接

 'partnership' => [
	...
			'on makePayment' => function($event){
				$model = $event->model;
				$userId = Yii::$app->Partnership->getUserByPartnerId($model->partner_id);
				$balance = Yii::$app->balance->getUserScore($userId);
				if ($balance){
					Yii::$app->balance->addTransaction($balance->id, 'in', $model->sum, 'partnership rewads');
				} else return false;
			}
  ],

如果连接的User模型不符合'common\models\User',则需要在Module.php模块中设置变量$userModule。