示例#1
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getGroupSalesLines()
 {
     return $this->hasMany(GroupSalesLine::className(), ['kelompok_id' => 'id']);
 }
    /**
     * Displays a single SalesActivity model.
     * @param integer $uid instead user_id
     * @return mixed
     */
    public function actionViewTimeLine(integer $uid = null, $customer = null, $start = null, $year = null, $group = null)
    {
        if (!$year) {
            $year = date('Y');
        }
        $salesActivityForm = new SalesActivityForm();
        $charts = ['pie' => [], 'line' => []];
        #prepared for all chart
        $now = true;
        $plan = SalesActivityPlan::find();
        $pieType = 'customer';
        $salesName = "All Sales Man";
        $salesActivityForm->sales = $uid;
        $salesActivityForm->customer = $customer;
        $salesActivityForm->date_begin = $start;
        if ($group) {
            // jika ada group id
            // cari user nya
            $userIds = \app\models\GroupSalesLine::find()->select('name')->where(['kelompok_id' => $group])->column();
            // var_dump($userIds);
        }
        // untuk filter dropdown by year
        if ($year) {
            $plan->andWhere('EXTRACT(YEAR FROM sales_activity_plan.the_date) = ' . $year);
        }
        // untuk filter dropdown by group
        $connection = Yii::$app->db;
        $queryGroup = <<<query
SELECT DISTINCT(id), initcap(name) AS name FROM group_sales WHERE is_main_group = true AND parent_id IS NULL ORDER BY name ASC
query;
        $modelGroup = $connection->createCommand($queryGroup)->queryAll();
        // untuk filter dari form input
        if ($salesActivityForm->load(Yii::$app->request->get()) && $salesActivityForm->validate()) {
            /*var_dump($salesActivityForm->date_begin);
            		die();*/
            $uid = $salesActivityForm->sales;
            if ($uid) {
                // die();
                $salesName = ResUsers::findOne($uid)->partner->name;
                $plan->where('sales_activity_plan.user_id = :uid')->addParams([':uid' => $uid]);
                $pieType = 'customer';
            }
            if ($salesActivityForm->customer) {
                $plan->andWhere('(sales_activity_plan.partner_id = :partner OR sales_activity_plan.actual_partner_id = :partner)')->addParams([':partner' => $salesActivityForm->customer]);
                $pieType = 'sales';
                $custName = ResPartner::findOne($salesActivityForm->customer)->name;
            }
            $start = $salesActivityForm->date_begin;
        } else {
            $msg = [];
            foreach ($salesActivityForm->errors as $error) {
                foreach ($error as $err) {
                    $msg[] = $err;
                }
            }
            if ($msg) {
                Yii::$app->session->setFlash('danger', implode(' and ', $msg));
            }
        }
        // filter user berdasarkan group dropdown
        if ($group) {
            $plan->andWhere(['user_id' => $userIds]);
        }
        // if defined start and end date
        if ($start) {
            $now = false;
        }
        if ($now) {
            $plan->andWhere('sales_activity_plan.the_date <= :now')->addParams([':now' => date('Y-m-d')]);
        }
        // echo $plan->createCommand()->sql;
        // var_dump($plan->with(['partner','user','user.partner','actualPartner'])->orderBy('year_p DESC, week_no DESC, dow DESC, user_id, daylight, not_planned_actual')->asArray()->all());
        // die();
        $dataProvider = new ArrayDataProvider(['allModels' => $plan->with(['partner', 'user', 'user.partner', 'actualPartner'])->orderBy('year_p DESC, week_no DESC, dow DESC, user_id, daylight, not_planned_actual')->asArray()->all()]);
        $pies = [];
        // var_dump($pieType);
        if ($pieType && $pieType == 'customer') {
            $chartData = $this->getCustomerActivityCompositionByUser($uid);
            // var_dump($chartData);
            $series = $chartData['series'];
            $pies[] = ['title' => 'Customer Visit Activity By ' . $salesName, 'series' => $chartData['series'], 'drillDown' => $chartData['drillDown'], 'drillDownTitle' => 'Customer Visit Activity'];
        } elseif ($pieType && ($pieType = 'sales')) {
            $series = $this->getCustomerActivityCompositionByCustomer($salesActivityForm->customer);
            $pies[] = ['title' => 'Relationship Activities On ' . $custName, 'series' => $series, 'drillDownTitle' => 'User Visit Activity On ' . ResPartner::findOne($salesActivityForm->customer)->name, 'drillDown' => []];
            // var_dump($series);
        } else {
            $pieSeries = false;
        }
        $charts['pie'] = $pies;
        // var_dump($charts);
        return $this->render('viewTimeLine', ['dataProvider' => $dataProvider, 'salesActivityForm' => $salesActivityForm, 'series' => $series, 'charts' => $charts, 'year' => $year, 'group_active' => $group, 'modelGroup' => $modelGroup]);
    }