diff --git a/backend/controllers/ProductController.php b/backend/controllers/ProductController.php index 9a072cc..a61c962 100644 --- a/backend/controllers/ProductController.php +++ b/backend/controllers/ProductController.php @@ -2,6 +2,7 @@ namespace backend\controllers; +use common\models\Log; use Yii; use common\models\Product; use backend\models\ProductSearch; @@ -117,8 +118,19 @@ class ProductController extends \backend\controllers\BackendController $accounts = Account::readAccounts($model->id_account); $categories = ProductCategory::read($model->id_product_category); - + + $stockOriginal = $model->stock; if ($model->load(Yii::$app->request->post()) && $model->save()) { + + $stockUpdated = $model->stock; + + $message = "Update product. Stock: " . $stockOriginal . " -> " . $stockUpdated; + Log::log([ + 'type' =>Log::$TYPE_CRUD, + 'message' => $message, + 'id_product' => $model->id_product + ]); + return $this->redirect(['view', 'id' => $model->id_product]); } else { return $this->render('update', [ diff --git a/backend/models/InventoryItemForm.php b/backend/models/InventoryItemForm.php index 5c28c6d..69f4651 100644 --- a/backend/models/InventoryItemForm.php +++ b/backend/models/InventoryItemForm.php @@ -2,6 +2,7 @@ namespace backend\models; +use common\models\Waste; use /** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */ Yii; use yii\base\Model; @@ -47,6 +48,7 @@ class InventoryItemForm extends Model{ /** internal stuff*/ public $product_in; + public $product_waste; public $product_out; public $product_stock; public $last_inventory_item; @@ -94,19 +96,18 @@ class InventoryItemForm extends Model{ public function save(){ - $this->loadLastInventory(); - $this->loadLastInventoryItem(); $this->loadProductIn(); $this->loadProductSold(); $this->loadProductStock(); + $this->loadProductWaste(); $item = new InventoryItem(); $item->count_in = $this->product_in; $item->count_sold = $this->product_out; $item->count_system = $this->product_stock; - + $item->count_waste = $this->product_waste; if ( isset($this->inventory )){ if ( $this->inventory->type == Inventory::$TYPE_DAILY){ @@ -125,7 +126,6 @@ class InventoryItemForm extends Model{ }else{ $item->count_prev = 0; } - if ( isset(\Yii::$app->user )){ $item->id_user = \Yii::$app->user->id; @@ -157,7 +157,7 @@ class InventoryItemForm extends Model{ $query->select(['coalesce(sum(procurement.count),0) as total_in']); $query->from(Procurement::tableName()); $query->innerJoin(Product::tableName(),"product.id_product = procurement.id_product"); - + if ( isset($this->last_inventory_item ) ){ $query->andWhere([ '>', 'procurement.created_at' ,$this->last_inventory_item->created_at]); } @@ -170,10 +170,31 @@ class InventoryItemForm extends Model{ }else{ $query->andWhere(['product.id_inventory_group' => $this->inventoryGroup->id_inventory_group]); } - + $this->product_in = $query->scalar(); - + } + + protected function loadProductWaste(){ + $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($this->last_inventory_item ) ){ + $query->andWhere([ '>', 'waste.created_at' ,$this->last_inventory_item->created_at]); + } + + + if ( $this->type == 'product') { + $query->andWhere(['product.id_product' => $this->product->id_product]); + }else{ + $query->andWhere(['product.id_inventory_group' => $this->inventoryGroup->id_inventory_group]); + } + + $this->product_waste = $query->scalar(); + + } protected function loadProductSold(){ diff --git a/common/models/InventoryItem.php b/common/models/InventoryItem.php index aea0365..d1d8c1c 100644 --- a/common/models/InventoryItem.php +++ b/common/models/InventoryItem.php @@ -17,6 +17,7 @@ use common\components\ProductAwareBehavior; * @property integer $id_inventory * @property integer $count_in * @property integer $count_sold + * @property integer $count_waste * @property integer $count * @property integer $count_prev * @property integer $count_system @@ -229,6 +230,7 @@ class InventoryItem extends BaseFitnessActiveRecord $count_prev = 0; $count_in = 0; $count_sold = 0; + $count_waste = 0; $price = 0; if (isset($price) && is_numeric($price)){ @@ -255,10 +257,14 @@ class InventoryItem extends BaseFitnessActiveRecord $count_sold = $this->count_sold; } + if ( isset($this->count_waste)){ + $count_waste = $this->count_waste; + } + //netto készlet érték $this->net_stock_money = $count * $purchase_price_net; //leltárhiány db - $this->stock_missing_count = $this->count - ($count_prev + $count_in - $count_sold) ; + $this->stock_missing_count = $this->count - ($count_prev + $count_in - $count_sold - $count_waste) ; //leltárhiány összeg $this->stock_missing_money = $price * $this->stock_missing_count; } diff --git a/common/models/Log.php b/common/models/Log.php index 32c5877..8131116 100644 --- a/common/models/Log.php +++ b/common/models/Log.php @@ -53,6 +53,7 @@ class Log extends BaseFitnessActiveRecord public static $TYPE_KEY_UNASSIGN = 180; public static $TYPE_TOWEL_IN = 190; public static $TYPE_TOWEL_OUT = 200; + public static $TYPE_CRUD = 210; /** * @inheritdoc diff --git a/console/controllers/InventoryConsoleController.php b/console/controllers/InventoryConsoleController.php index 0a62774..c23d669 100644 --- a/console/controllers/InventoryConsoleController.php +++ b/console/controllers/InventoryConsoleController.php @@ -1,22 +1,25 @@ andWhere(['id_inventory' => $inventory->id_inventory])->all(); /** @var /common/models/InventoryItem $item */ - foreach ($items as $item ){ + foreach ($items as $item) { + /** @var /common/models/InventoryItem $prev */ $prev = $item->inventoryItemPrev; - if ( !isset($prev)){ - continue; + if (!isset($prev)) { + $start = null; + $end = null; + } else { + $start = $prev->created_at; + $end = $item->created_at; } - $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->select(['coalesce(sum(waste.count),0) as total_waste']); + $query->from(Waste::tableName()); + $query->innerJoin(Product::tableName(), "product.id_product = waste.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]); + if (isset($prev)) { + $query->andWhere(['>', 'waste.created_at', $prev->created_at]); + } - $query->andWhere([ '>','transfer.created_at',$start ]); - $query->andWhere([ '<','transfer.created_at',$end ]); + $query->andWhere(['<', 'waste.created_at', $inventory->created_at]); - $products = $query->scalar(); - $item->count_sold = $products; - + if ($item->type == 10) { + $query->andWhere(['product.id_product' => $item->id_product]); + } else { + $query->andWhere(['product.id_inventory_group' => $item->id_inventory_group]); + } - echo $item->price_brutto . " - ". $item->productName ."\n"; + $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(); @@ -69,14 +128,12 @@ class InventoryConsoleController extends Controller{ * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ - public function actionCreate() + public function actionCreate() { $inventoryManager = new InventoryManager(); $inventoryManager->generateDaily(); } - - } diff --git a/console/migrations/m170404_060114_alter_table_inventory_item_add_colum_count_waste.php b/console/migrations/m170404_060114_alter_table_inventory_item_add_colum_count_waste.php new file mode 100644 index 0000000..75fee3a --- /dev/null +++ b/console/migrations/m170404_060114_alter_table_inventory_item_add_colum_count_waste.php @@ -0,0 +1,30 @@ +addColumn("inventory_item", "count_waste", "int default 0"); + } + + public function down() + { + echo "m170404_060114_alter_table_inventory_item_add_colum_count_waste cannot be reverted.\n"; + + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +}