<?php

namespace console\controllers;

use backend\components\InventoryManager;
use common\models\Inventory;
use common\models\InventoryItem;
use common\models\Product;
use common\models\Waste;
use yii\console\Controller;
use yii\db\Query;


class InventoryConsoleController extends Controller
{


    /**
     * @param $idInventory
     */
    public function actionFixWaste($idInventory)
    {

        $inventory = Inventory::findOne($idInventory);


        /** @var /common/models/InventoryItem[] $items */
        $items = InventoryItem::find()->andWhere(['id_inventory' => $inventory->id_inventory])->all();

        /** @var /common/models/InventoryItem $item */
        foreach ($items as $item) {

            /** @var /common/models/InventoryItem $prev */
            $prev = $item->inventoryItemPrev;

            if (!isset($prev)) {
                $start = null;
                $end = null;
            } else {
                $start = $prev->created_at;
                $end = $item->created_at;
            }

            $query = new Query();
            $query->select(['coalesce(sum(waste.count),0) as total_waste']);
            $query->from(Waste::tableName());
            $query->innerJoin(Product::tableName(), "product.id_product = waste.id_product");

            if (isset($prev)) {
                $query->andWhere(['>', 'waste.created_at', $prev->created_at]);
            }

            $query->andWhere(['<', 'waste.created_at', $inventory->created_at]);


            if ($item->type == 10) {
                $query->andWhere(['product.id_product' => $item->id_product]);
            } else {
                $query->andWhere(['product.id_inventory_group' => $item->id_inventory_group]);
            }

            $product_waste = $query->scalar();
            $item->count_waste = $product_waste;

            echo $item->price_brutto . " - " . $item->productName . " - " . $product_waste . "\n";

            $item->save();

        }

    }

    /**
     * @param $idInventory
     */
    public
    function actionFixSold($idInventory)
    {

        $inventory = Inventory::findOne($idInventory);


        /** @var /common/models/InventoryItem[] $items */
        $items = InventoryItem::find()->andWhere(['id_inventory' => $inventory->id_inventory])->all();

        /** @var /common/models/InventoryItem $item */
        foreach ($items as $item) {

//            $prev = $item->inventoryItemPrev;
//
//            if ( !isset($prev)){
//                continue;
//            }
//            $start = $prev->created_at;
//            $end = $item->created_at;
//
//
//            $query = new Query();
//            $query->select([
//                new Expression(" coalesce( sum( transfer.count ),0)")
//            ]);
//            $query->from('transfer');
//            $query->innerJoin('sale','sale.id_sale = transfer.id_object');
//            $query->innerJoin('product','sale.id_product = product.id_product');
//
//            $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]);
//            $query->andWhere(['in', 'transfer.status', [Transfer::STATUS_NOT_PAID, Transfer::STATUS_PAID]]);
//            $query->andWhere(['product.id_product' => $prev->id_product]);
//
//            $query->andWhere([ '>','transfer.created_at',$start ]);
//            $query->andWhere([ '<','transfer.created_at',$end ]);
//
//            $products = $query->scalar();
//
//           $item->count_sold = $products;
//

            echo $item->price_brutto . " - " . $item->productName . "\n";

            $item->save();

        }

    }

    /**
     * Creates a new Inventory model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public  function actionCreate()
    {
        $inventoryManager = new InventoryManager();
        $inventoryManager->generateDaily();
    }


}
	
