public function getProducts($id)
 {
     $stock = Stock::find($id);
     $stockProducts = $stock->stockProducts;
     $products = [];
     foreach ($stockProducts as $sp) {
         $products[] = $sp->product;
     }
     return $products;
 }
 public function add($stock_id)
 {
     if ($this->validate()) {
         $stock = Stock::find($stock_id);
         $request = Request::insert(['stock_id' => $stock_id, 'month' => $this->monthCounter]);
         Application::mail(User::find(Yii::$app->params['chat']['consultant_id'])->getEmail(), 'Запрос на добавление услуги', 'request', ['stock' => $stock, 'user' => \Yii::$app->user->identity, 'request' => $request]);
         return true;
     } else {
         return false;
     }
 }
Beispiel #3
0
 /**
  * Актвирует услугу
  *
  * @return array
  * [
  *   'stock'      => \app\models\Stock
  *   'dateFinish' => string - дата до которого оплачена услуга в формате 'yyyy-mm-dd'
  * ]
  */
 public function activate()
 {
     $stock_id = $this->getField('stock_id');
     $stock = Stock::find($stock_id);
     $monthCounter = $this->getField('month');
     $dateFinish = \app\models\UserStock::add(\Yii::$app->user->getId(), $stock_id, $monthCounter, $this->getField('datetime'));
     $dateFinishStr = Yii::$app->formatter->asDate($dateFinish);
     WalletHistory::insert("Услуга включена, акция: {$stock->getName()}, месяцев: {$monthCounter}, до: {$dateFinishStr}");
     self::delete();
     return ['stock' => $stock, 'dateFinish' => $dateFinish];
 }
Beispiel #4
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Stock::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['idproducto' => $this->idproducto, 'stock' => $this->stock]);
     return $dataProvider;
 }
 /**
  * Рисует графики с прошлым и будущим
  *
  * @param int $id идентификатор курса
  *
  * @return string
  */
 public function actionStock_item3($id)
 {
     $item = \app\models\Stock::find($id);
     $start = (new \DateTime())->sub(new \DateInterval('P31D'));
     $end = (new \DateTime())->sub(new \DateInterval('P1D'));
     $isPaid = Yii::$app->user->identity->isPaid($id);
     $defaultParams = ['start' => $start, 'end' => $end, 'formatX' => 'd.m'];
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockKurs::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->all()]]);
     $lineArrayKurs = \app\service\GraphExporter::convert($params);
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisRed::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
     $lineArrayRed = \app\service\GraphExporter::convert($params);
     $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisBlue::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
     $lineArrayBlue = \app\service\GraphExporter::convert($params);
     $lineArrayPast = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayKurs['y'][0], $lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]);
     if ($isPaid) {
         $start = new \DateTime();
         $end = (new \DateTime())->add(new \DateInterval('P30D'));
         $defaultParams = ['start' => $start, 'end' => $end];
         $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisRed::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
         $lineArrayRed = \app\service\GraphExporter::convert($params);
         $params = ArrayHelper::merge($defaultParams, ['rows' => [\app\models\StockPrognosisBlue::query(['stock_id' => $id])->andWhere(['between', 'date', $start->format('Y-m-d'), $end->format('Y-m-d')])->select(['date', 'delta as kurs'])->all()]]);
         $lineArrayBlue = \app\service\GraphExporter::convert($params);
         $lineArrayFuture = \app\service\GraphUnion::convert(['x' => $lineArrayRed['x'], 'y' => [$lineArrayRed['y'][0], $lineArrayBlue['y'][0]]]);
     } else {
         $lineArrayFuture = null;
     }
     return $this->render(['item' => $item, 'lineArrayPast' => $lineArrayPast, 'lineArrayFuture' => $lineArrayFuture, 'isPaid' => $isPaid]);
 }
 /**
  * Updates an existing Productos model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param string $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     $model = $this->findModel($id);
     $img_model = new UploadForm();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         $request = Yii::$app->request;
         $id_producto = $model->id;
         $fotos = Fotos::find()->where(['idProducto' => $id_producto])->all();
         foreach ($fotos as $foto) {
             Fotos::deleteFoto($foto);
         }
         $img_model->imageFiles = UploadedFile::getInstances($img_model, 'imageFiles');
         if ($img_model->upload($model->id)) {
             if ($model->tipo == 0) {
                 return $this->redirect(['view', 'id' => $model->id]);
             } else {
                 if ($model->tipo == 1) {
                     $porTiempo = Temporales::find()->where(['idproducto' => $model->id])->one();
                     $porTiempo->fecha = $request->post('fecha');
                     $porTiempo->idproducto = $model->id;
                     $porTiempo->save();
                     return $this->redirect(['view', 'id' => $model->id]);
                 } else {
                     $stock = Stock::find()->where(['idproducto' => $model->id])->one();
                     $cantidad = $request->post('cant');
                     $stock->stock = $cantidad;
                     $stock->idproducto = $model->id;
                     $stock->save();
                     return $this->redirect(['view', 'id' => $model->id]);
                 }
             }
         }
     } else {
         return $this->render('update', ['model' => $model, 'img_model' => $img_model]);
     }
 }
Beispiel #7
0
 /**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function lotUsage(UsageRequest $request)
 {
     $usage = Usage::findOrFail($request->id);
     $usage->stock_id = $request->stock_id;
     $usage->quantity_used = $request->quantity_used;
     $usage->date_of_usage = $request->date_of_usage;
     $usage->issued_by = $request->issued_by;
     $usage->received_by = $request->received_by;
     $usage->remarks = $request->remarks;
     $usage->user_id = Auth::user()->id;
     $url = session('SOURCE_URL');
     if ($usage->quantity_used > Stock::find((int) $usage->stock_id)->quantity()) {
         return redirect()->back()->with('message', trans('messages.insufficient-stock'))->withInput($request->all());
     } else {
         if ($usage->quantity_used > Topup::find((int) $usage->request_id)->quantity_ordered) {
             return redirect()->back()->with('message', trans('messages.issued-greater-than-ordered'))->withInput($request->all());
         } else {
             $usage->save();
             return redirect()->to($url)->with('message', trans('messages.record-successfully-updated'))->with('active_stock', $usage->stock->id);
         }
     }
 }
 public function actionPrognosis_edit($id)
 {
     return $this->render(['items' => \app\models\StockPrognosis::query(['stock_id' => $id])->orderBy(['date' => SORT_DESC])->all(), 'item' => \app\models\Stock::find($id)]);
 }
 /**
  * AJAX
  *
  * REQUEST:
  * - monthcounter - int - количество покупамых месяцев
  * - stock_id - int - идентификатор акции
  */
 public function actionAdd_step1()
 {
     $monthCounter = self::getParam('monthcounter');
     $stockId = self::getParam('stock_id');
     $request = Request::insert(['stock_id' => $stockId, 'month' => $monthCounter]);
     Application::mail(User::find(Yii::$app->params['chat']['consultant_id'])->getEmail(), 'Запрос на добавление услуги', 'request', ['stock' => Stock::find($stockId), 'user' => \Yii::$app->user->identity, 'request' => $request]);
     return self::jsonSuccess(['user' => ['email' => Yii::$app->user->identity->getEmail(), 'fio' => Yii::$app->user->identity->getNameFull()], 'request' => ['id' => $request->getId(), 'sum' => $monthCounter * 100 * 65]]);
 }
Beispiel #10
0
 /**
  * Импортирует данные с Finam в таблицу курсов
  *
  * @param int    $stock_id
  * @param string $start             дата 'yyyy-mm-dd'
  * @param string $end               дата 'yyyy-mm-dd'
  * @param bool   $isReplaceExisting Заменять уже имеющиеся данные
  *                                  true - если в таблице уже есть курс на эту дату то он будет перезатерт
  *                                  false - если в таблице уже есть курс на эту дату то он сохранится
  *
  * @throws \yii\base\InvalidConfigException
  */
 public static function importCandels($stock_id, $start, $end, $isReplaceExisting = false)
 {
     $row = Stock::find($stock_id)->getFields();
     $data = ['params' => ['market' => $row['finam_market'], 'em' => $row['finam_em'], 'code' => $row['finam_code']]];
     $importer = new \app\service\DadaImporter\Finam($data);
     $data = $importer->importCandels($start, $end);
     $dateArrayRows = StockKurs::query(['between', 'date', $start, $end])->select(['date'])->andWhere(['stock_id' => $stock_id])->column();
     $insert = [];
     $update = [];
     foreach ($data as $row) {
         if (in_array($row['date'], $dateArrayRows)) {
             $date = $row['date'];
             $row['kurs'] = $row['close'];
             unset($row['date']);
             $update[$date] = $row;
         } else {
             $insert[] = [$stock_id, $row['date'], $row['open'], $row['high'], $row['low'], $row['close'], $row['volume'], $row['close']];
         }
     }
     StockKurs::batchInsert(['stock_id', 'date', 'open', 'high', 'low', 'close', 'volume', 'kurs'], $insert);
     if ($isReplaceExisting) {
         foreach ($update as $date => $fields) {
             (new Query())->createCommand()->update(StockKurs::TABLE, $fields, ['date' => $date, 'stock_id' => $stock_id])->execute();
         }
     }
 }