/**
  * Creates a new RutaDiaria model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate($idRuta)
 {
     $model = new RutaDiaria();
     $ruta = Ruta::find()->where(['id' => $idRuta])->one();
     $ordenComercios = OrdenComercio::find()->where(['id_ruta' => $idRuta])->all();
     $model->id_usuario = $ruta->id_usuario;
     $model->fecha = date("Y-m-d");
     if (!$this->existeRutaDiariaPorUsuarioYFecha($model->id_usuario, $model->fecha)) {
         $idRutaDiaria = $model->save();
         if ($idRutaDiaria !== false) {
             $orden = 1;
             foreach ($ordenComercios as $ordenComercio) {
                 $rutaDiariaComercio = new RutaDiariaComercio();
                 $rutaDiariaComercio->id_comercio = $ordenComercio->id_comercio;
                 $rutaDiariaComercio->link("idRutaDiaria", $model);
                 $rutaDiariaComercio->orden = $orden;
                 $rutaDiariaComercio->save();
                 $orden++;
             }
         }
         Yii::$app->getSession()->setFlash('success', Yii::t('core', 'Daily Route has been created'));
     } else {
         Yii::$app->getSession()->setFlash('danger', Yii::t('core', 'There is already an instance of this route for today'));
     }
     return $this->redirect(['ruta/view', 'id' => $idRuta]);
 }
 /**
  * Creates a new RutaDiariaComercio model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $model = new RutaDiariaComercio();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         return $this->redirect(['view', 'id' => $model->id]);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
 public function actionPedido()
 {
     $params = Yii::$app->getRequest()->post();
     $usuario = User::findIdentityByAccessToken($params['muli_token']);
     $arrayProductos = $params['productos'];
     $valid = false;
     foreach ($arrayProductos as $productos) {
         $rutaDiaria = RutaDiaria::find()->where(['id_usuario' => $usuario->id])->andWhere(['fecha' => date('Y-m-d')])->one();
         $rutaDiariaComercio = RutaDiariaComercio::find()->where(['id_comercio' => $params['id_comercio']])->andWhere(['id_ruta_diaria' => $rutaDiaria->id])->one();
         $pedidoIdProd = Pedido::find()->where(['id_producto' => $productos['id_producto']])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercio->id])->one();
         if ($pedidoIdProd != null) {
             $pedido = $pedidoIdProd;
             $pedido->setAttribute('cantidad', $productos['cant']);
         } else {
             $pedido = new Pedido();
             $pedido->setAttribute('id_producto', $productos['id_producto']);
             $pedido->setAttribute('id_ruta_diaria_com', $rutaDiariaComercio->id);
             $pedido->setAttribute('cantidad', $productos['cant']);
         }
         if ($pedido->cantidad != 0) {
             if ($pedido->validate() && $pedido->save()) {
                 $valid = true;
             } else {
                 throw new BadRequestHttpException(Yii::t('mobile', 'Failed to save route with id: ' . $rutaDiariaComercio->id . ''));
             }
         } else {
             if ($pedido->validate()) {
                 $valid = true;
             } else {
                 throw new BadRequestHttpException(Yii::t('mobile', 'Failed to save route with id: ' . $rutaDiariaComercio->id . ''));
             }
         }
     }
     return $valid;
 }
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = RutaDiariaComercio::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(['id' => $this->id, 'orden' => $this->orden, 'id_ruta_diaria' => $this->id_ruta_diaria, 'id_comercio' => $this->id_comercio]);
     return $dataProvider;
 }
 public function findRutasComercio($id)
 {
     if ($models = RutaDiariaComercio::find()->where(['id_ruta_diaria' => $id])->all() !== null) {
         return $models;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getIdRutaDiariaCom()
 {
     return $this->hasOne(RutaDiariaComercio::className(), ['id' => 'id_ruta_diaria_com']);
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getRutaDiariaComercios()
 {
     return $this->hasMany(RutaDiariaComercio::className(), ['id_ruta_diaria' => 'id']);
 }
 private function cargarArrayPedidos($idComercio, $fechaDesde, $fechaHasta)
 {
     $respuesta = [];
     $queryRutaDiaria = RutaDiaria::find()->select('id')->where(['between', 'fecha', $fechaDesde, $fechaHasta]);
     $queryRutaDiariaCom = RutaDiariaComercio::find()->where(['ruta_diaria_comercio.id_comercio' => $idComercio])->andWhere(['in', 'id_ruta_diaria', $queryRutaDiaria]);
     if ($queryRutaDiariaCom->count() > 0) {
         $rutaDiariaComercios = $queryRutaDiariaCom->all();
         $pedidos = [];
         $i = 0;
         foreach ($rutaDiariaComercios as $rutaDiariaComercio) {
             if (Pedido::find()->where(['id_ruta_diaria_com' => $rutaDiariaComercio->id])->count() > 0) {
                 $pedidosRutaDiariaComercio = Pedido::find()->where(['id_ruta_diaria_com' => $rutaDiariaComercio->id])->all();
                 foreach ($pedidosRutaDiariaComercio as $pedido) {
                     $pedidos[$i] = $pedido;
                     $i++;
                 }
             }
         }
         if (count($pedidos) > 0) {
             foreach ($pedidos as $pedido) {
                 if (isset($respuesta[$pedido->id_producto])) {
                     $respuesta[$pedido->id_producto]['cantidad'] = $respuesta[$pedido->id_producto]['cantidad'] + $pedido->cantidad;
                 } else {
                     $nombreProducto = Producto::Find()->select('nombre')->where(['id' => $pedido->id_producto])->one()->nombre;
                     $respuesta[$pedido->id_producto] = ['nombre' => $nombreProducto, 'cantidad' => $pedido->cantidad];
                 }
             }
         }
     }
     return $respuesta;
 }
 public function actionStock()
 {
     $params = Yii::$app->getRequest()->post();
     $user = User::findIdentityByAccessToken($params['muli_token']);
     $valid = false;
     //return $params;
     $arrayStock = $params['stock'];
     foreach ($arrayStock as $stockEnv) {
         $rutaDiaria = RutaDiaria::find()->where(['id_usuario' => $user->id])->andWhere(['fecha' => date('Y-m-d')])->one();
         $rutaDiariaComercio = RutaDiariaComercio::find()->where(['id_comercio' => $params['id_comercio']])->andWhere(['id_ruta_diaria' => $rutaDiaria->id])->one();
         $stockIdProd = Stock::find()->where(['id_producto' => $stockEnv['id_producto']])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercio->id])->one();
         if ($stockIdProd != null) {
             $stock = $stockIdProd;
             $stock->setAttribute('cantidad', $stockEnv['cant']);
         } else {
             $stock = new Stock();
             $stock->setAttribute('id_ruta_diaria_com', $rutaDiariaComercio->id);
             $stock->setAttribute('id_producto', $stockEnv['id_producto']);
             $stock->setAttribute('cantidad', $stockEnv['cant']);
         }
         if ($stock->cantidad != 0) {
             if ($stock->validate()) {
                 if ($stockIdProd != null) {
                     //es un update del Stock, podemos haber realizado ya el calculo de la venta.
                     $rutaDiariaComercioFecha = RutaDiariaComercio::find()->where('ruta_diaria_comercio.id !=' . $rutaDiariaComercio->id)->andWhere('ruta_diaria_comercio.id_ruta_diaria!=' . $rutaDiariaComercio->id_ruta_diaria)->andWhere(['ruta_diaria_comercio.id_comercio' => $rutaDiariaComercio->id_comercio])->joinWith(['idRutaDiaria' => function ($query) {
                         //$query->where('MAX(ruta_diaria.fecha)');
                         $query->groupBy('ruta_diaria.id')->having('MAX(ruta_diaria.fecha)')->orderBy('fecha DESC');
                     }])->one();
                     $stockAnterior = Stock::find()->where(['id_producto' => $stock->id_producto])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercioFecha->id])->one();
                     $pedidoAnterior = Pedido::find()->where(['id_producto' => $stock->id_producto])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercioFecha->id])->one();
                     if ($stockAnterior != null) {
                         $vendidos = $stockAnterior->cantidad - $stock->cantidad;
                         if ($pedidoAnterior != null) {
                             $vendidos = $vendidos + $pedidoAnterior->cantidad;
                         }
                         $compraProducto = ComercioProducto::find()->where(['id_comercio' => $params['id_comercio']])->andWhere(['id_producto' => $stock->id_producto])->andWhere(['fecha' => date('Y-m-d')])->one();
                         $compraProducto->setAttribute('vendidos', $vendidos);
                         $compraProducto->save();
                     }
                 } else {
                     $rutaDiariaComercioFecha = RutaDiariaComercio::find()->where('ruta_diaria_comercio.id !=' . $rutaDiariaComercio->id)->andWhere('ruta_diaria_comercio.id_ruta_diaria!=' . $rutaDiariaComercio->id_ruta_diaria)->andWhere(['ruta_diaria_comercio.id_comercio' => $rutaDiariaComercio->id_comercio])->joinWith(['idRutaDiaria' => function ($query) {
                         //$query->where('MAX(ruta_diaria.fecha)');
                         $query->groupBy('ruta_diaria.id')->having('MAX(ruta_diaria.fecha)')->orderBy('fecha DESC');
                     }])->one();
                     if ($rutaDiariaComercioFecha != null) {
                         //return "existe?:".$stock->id_producto;
                         $stockAnterior = Stock::find()->where(['id_producto' => $stock->id_producto])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercioFecha->id])->one();
                         $pedidoAnterior = Pedido::find()->where(['id_producto' => $stock->id_producto])->andWhere(['id_ruta_diaria_com' => $rutaDiariaComercioFecha->id])->one();
                         if ($stockAnterior != null) {
                             $vendidos = $stockAnterior->cantidad - $stock->cantidad;
                             if ($pedidoAnterior != null) {
                                 $vendidos = $vendidos + $pedidoAnterior->cantidad;
                             }
                             $compraProducto = new ComercioProducto();
                             $compraProducto->setAttribute('vendidos', $vendidos);
                             $compraProducto->setAttribute('id_comercio', $params['id_comercio']);
                             $compraProducto->setAttribute('id_producto', $stock->id_producto);
                             $compraProducto->setAttribute('fecha', date('Y-m-d'));
                             $compraProducto->save();
                         }
                     }
                 }
                 if ($stock->save()) {
                     $valid = true;
                 } else {
                     $valid = false;
                 }
             } else {
                 throw new BadRequestHttpException(Yii::t('mobile', 'Failed to save orders data...'));
             }
         } else {
             if ($stock->validate()) {
                 $valid = true;
             } else {
                 throw new BadRequestHttpException(Yii::t('mobile', 'Failed to save orders data...'));
             }
         }
     }
     return $valid;
 }