add wate to inventory

This commit is contained in:
Roland Schneider 2017-04-27 20:53:35 +02:00
parent ec5968511b
commit 567592b73e
6 changed files with 164 additions and 37 deletions

View File

@ -2,6 +2,7 @@
namespace backend\controllers;
use common\models\Log;
use Yii;
use common\models\Product;
use backend\models\ProductSearch;
@ -118,7 +119,18 @@ 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', [

View File

@ -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){
@ -126,7 +127,6 @@ class InventoryItemForm extends Model{
$item->count_prev = 0;
}
if ( isset(\Yii::$app->user )){
$item->id_user = \Yii::$app->user->id;
}
@ -175,6 +175,27 @@ class InventoryItemForm extends Model{
}
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(){
$query = new Query();

View File

@ -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;
}

View File

@ -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

View File

@ -1,22 +1,25 @@
<?php
namespace console\controllers;
use backend\components\InventoryManager;
use common\models\Inventory;
use common\models\InventoryItem;
use common\models\Transfer;
use common\models\Product;
use common\models\Waste;
use yii\console\Controller;
use yii\db\Expression;
use yii\db\Query;
class InventoryConsoleController extends Controller{
class InventoryConsoleController extends Controller
{
/**
* @param $idInventory
*/
public function actionFixSold($idInventory){
public function actionFixWaste($idInventory)
{
$inventory = Inventory::findOne($idInventory);
@ -27,34 +30,90 @@ class InventoryConsoleController extends Controller{
/** @var /common/models/InventoryItem $item */
foreach ($items as $item) {
/** @var /common/models/InventoryItem $prev */
$prev = $item->inventoryItemPrev;
if (!isset($prev)) {
continue;
}
$start = null;
$end = null;
} else {
$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]);
}
$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";
@ -76,7 +135,5 @@ class InventoryConsoleController extends Controller{
}
}

View File

@ -0,0 +1,30 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
class m170404_060114_alter_table_inventory_item_add_colum_count_waste extends Migration
{
public function up()
{
$this->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()
{
}
*/
}