diff --git a/common/models/ReportsTask.php b/common/models/ReportsTask.php index 061f09c..b86fcf0 100755 --- a/common/models/ReportsTask.php +++ b/common/models/ReportsTask.php @@ -19,6 +19,15 @@ use Yii; */ class ReportsTask extends \yii\db\ActiveRecord { + const SCENARIO_WITHOUT_REPORT_ID = 'withoutReportID'; + + public function scenarios() + { + $scenarios = parent::scenarios(); + $scenarios[self::SCENARIO_WITHOUT_REPORT_ID] = self::attributes(); + return $scenarios; + } + /** * {@inheritdoc} */ @@ -33,7 +42,7 @@ class ReportsTask extends \yii\db\ActiveRecord public function rules() { return [ - [['report_id'], 'required'], + [['report_id'], 'required', 'on' => self::SCENARIO_DEFAULT], [['report_id', 'created_at', 'status', 'minutes_spent'], 'integer'], [['hours_spent'], 'number'], ['minutes_spent', 'compare', 'compareValue' => 60, 'operator' => '<'], diff --git a/frontend/config/main.php b/frontend/config/main.php index 5cbe40f..6bf6071 100755 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -84,6 +84,7 @@ return [ 'rules' => [ 'site/index' => 'card/user-card/index', 'api/profile/' => 'api/profile/index', + 'api/reports/' => 'api/reports/view', '' => 'card/user-card/index', ['class' => 'yii\rest\UrlRule', 'controller' => 'skills'], ], diff --git a/frontend/modules/api/controllers/ReportsController.php b/frontend/modules/api/controllers/ReportsController.php index 11333c7..fa643d5 100755 --- a/frontend/modules/api/controllers/ReportsController.php +++ b/frontend/modules/api/controllers/ReportsController.php @@ -5,6 +5,7 @@ namespace frontend\modules\api\controllers; use common\behaviors\GsCors; use common\classes\Debug; use common\models\Reports; +use common\models\ReportsTask; use frontend\modules\api\models\ReportSearchForm; use JsonException; use Yii; @@ -67,20 +68,43 @@ class ReportsController extends Controller return $reportsModel->byParams(); } + public function actionView($id): array{ + $report = Reports::findOne($id); + return array_merge($report->toArray(), ['tasks' => $report->_task]); + } + public function actionCreate() { - $reportsModel = new Reports(); - $params = Yii::$app->request->post(); + if (!isset($params['tasks'])){ + throw new BadRequestHttpException('Нет параметра tasks'); + } + + $reportsModel = new Reports(); $reportsModel->attributes = $params; if(!$reportsModel->validate()){ throw new BadRequestHttpException(json_encode($reportsModel->errors)); } - $reportsModel->save(); + $tasks = []; + foreach (json_decode($params['tasks'], true) as $jsonTask){ + $task = new ReportsTask(); + $task->scenario = ReportsTask::SCENARIO_WITHOUT_REPORT_ID; + $task->attributes = $jsonTask; + if (!$task->validate()) { + throw new BadRequestHttpException(json_encode($task->errors)); + } + $tasks []= $task->attributes; + } + $attributes = $task->attributes(); - return $reportsModel->toArray(); + $reportsModel->save(); + $tasks = array_map(function ($task)use($reportsModel){$task['report_id'] = $reportsModel->id; return $task;}, $tasks); + + Yii::$app->db->createCommand()->batchInsert(ReportsTask::tableName(), $attributes, $tasks)->execute(); + + return array_merge($reportsModel->toArray(), ['tasks' => $tasks]); } public function actionDelete()