add changes to account state

This commit is contained in:
2015-10-19 07:48:46 +02:00
parent b04cbda645
commit 9145f21371
50 changed files with 2139 additions and 27 deletions

View File

@@ -0,0 +1,49 @@
<?php
namespace common\components;
use yii\base\InvalidConfigException;
use Yii;
use yii\base\Model;
class ArrayValidator extends Validator
{
public $arrayAttributeName;
/**
* @inheritdoc
*/
public function init()
{
parent::init();
if ($this->message === null) {
$this->message = Yii::t('yii', '{attribute} is invalid.');
}
}
/**
* @inheritdoc
*/
public function validateAttribute($model, $attribute)
{
$value = $model->$attribute;
if (!is_array($value)) {
$this->addError($model, $attribute, $this->message);
return;
}
}
/**
* @inheritdoc
*/
protected function validateValue($value)
{
if (!is_array($value)) {
return [Yii::t('yii', '{attribute} is invalid.'), []];
}
return null;
}
}

View File

@@ -17,6 +17,12 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Account' => 'Kassza',
'All' => 'Mind',
'Money total' => 'Összesen',
'Product' => 'Termék',
'Ticket' => 'Bérlet',
'Total' => 'Összesen',
'Comment' => 'Megjegyzés',
'Count' => 'Mennyiség',
'Created At' => 'Dátum',

View File

@@ -72,6 +72,10 @@ class Account extends \yii\db\ActiveRecord
];
}
public function getUserAccountAssignments(){
return $this->hasMany(UserAccountAssignment::className(), ['id_account' => 'id_account']);
}
static function statuses() {
return [
self::STATUS_ACTIVE => Yii::t('common/account', 'Active'),
@@ -123,6 +127,22 @@ class Account extends \yii\db\ActiveRecord
return $accounts;
}
public static function read($forceIncludeAccount = null){
$accounts = null;
$query = Account::find();
$query->innerJoinWith('userAccountAssignments');
$query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id]);
$query->andWhere(['status' => Account::STATUS_ACTIVE]);
if ( $forceIncludeAccount == null){
$query->andWhere(['status' => Account::STATUS_ACTIVE])->all();
}else{
$query->andWhere( ['or', ['status' => Account::STATUS_ACTIVE], ['id_account' => $forceIncludeAccount ] ])->all();
}
$accounts = $query->all();
return $accounts;
}
}

View File

@@ -0,0 +1,227 @@
<?php
namespace common\models;
use Yii;
use yii\db\QueryBuilder;
use yii\helpers\ArrayHelper;
/**
* This is the model class for table "account_state".
*
* @property integer $id_account_state
* @property integer $id_account
* @property integer $type
* @property integer $money
* @property integer $banknote_5_ft
* @property integer $banknote_10_ft
* @property integer $banknote_20_ft
* @property integer $banknote_50_ft
* @property integer $banknote_100_ft
* @property integer $banknote_200_ft
* @property integer $banknote_500_ft
* @property integer $banknote_1000_ft
* @property integer $banknote_2000_ft
* @property integer $banknote_5000_ft
* @property integer $banknote_10000_ft
* @property integer $banknote_20000_ft
* @property integer $id_user
* @property string $created_at
* @property string $updated_at
*/
class AccountState extends \common\models\BaseFitnessActiveRecord
{
const TYPE_OPEN = 10;
const TYPE_CLOSE = 20;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'account_state';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id_account','money' ], 'required'],
[['id_account', 'type', 'money', 'banknote_5_ft', 'banknote_10_ft', 'banknote_20_ft', 'banknote_50_ft', 'banknote_100_ft', 'banknote_200_ft', 'banknote_500_ft', 'banknote_1000_ft', 'banknote_2000_ft', 'banknote_5000_ft', 'banknote_10000_ft', 'banknote_20000_ft' ], 'integer'],
[['comment' ], 'string' ,'max' => 255],
[['prev_state' ], 'integer'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id_account_state' => Yii::t('common/account_state', 'Id Account State'),
'id_account' => Yii::t('common/account_state', 'Id Account'),
'type' => Yii::t('common/account_state', 'Type'),
'money' => Yii::t('common/account_state', 'Money'),
'banknote_5_ft' => Yii::t('common/account_state', 'Banknote 5 Ft'),
'banknote_10_ft' => Yii::t('common/account_state', 'Banknote 10 Ft'),
'banknote_20_ft' => Yii::t('common/account_state', 'Banknote 20 Ft'),
'banknote_50_ft' => Yii::t('common/account_state', 'Banknote 50 Ft'),
'banknote_100_ft' => Yii::t('common/account_state', 'Banknote 100 Ft'),
'banknote_200_ft' => Yii::t('common/account_state', 'Banknote 200 Ft'),
'banknote_500_ft' => Yii::t('common/account_state', 'Banknote 500 Ft'),
'banknote_1000_ft' => Yii::t('common/account_state', 'Banknote 1000 Ft'),
'banknote_2000_ft' => Yii::t('common/account_state', 'Banknote 2000 Ft'),
'banknote_5000_ft' => Yii::t('common/account_state', 'Banknote 5000 Ft'),
'banknote_10000_ft' => Yii::t('common/account_state', 'Banknote 10000 Ft'),
'banknote_20000_ft' => Yii::t('common/account_state', 'Banknote 20000 Ft'),
'id_user' => Yii::t('common/account_state', 'Id User'),
'created_at' => Yii::t('common/account_state', 'Created At'),
'updated_at' => Yii::t('common/account_state', 'Updated At'),
'comment' => Yii::t('common/account_state', 'Comment'),
];
}
public static function banknoteValues()
{
return [
'banknote_5_ft' => 5,
'banknote_10_ft' => 10,
'banknote_20_ft' => 20,
'banknote_50_ft' => 50,
'banknote_100_ft' => 100,
'banknote_200_ft' => 200,
'banknote_500_ft' => 500,
'banknote_1000_ft' => 1000,
'banknote_2000_ft' => 2000,
'banknote_5000_ft' => 5000,
'banknote_10000_ft' => 10000,
'banknote_20000_ft' => 20000,
];
}
public function getAccount(){
return $this->hasOne( Account::className(), ["id_account" =>"id_account" ] ) ;
}
public function getAccountName(){
$result = "";
$account = $this->account;
if (isset($account)){
$result = $account->name;
}
return $result;
}
public function getUser(){
return $this->hasOne( User::className(), ["id" =>"id_user" ] );
}
public function getUserName(){
$result = "";
$user = $this->user;
if (isset($this->user)){
$result = $user->username;
}
return $result;
}
public function getTypeName(){
$result = "";
$type = AccountState::findType($this->type);
if (isset($type)){
$result = $type;
}
return $result;
}
public static function types(){
return [
self::TYPE_OPEN => Yii::t('common/account-state','Open'),
self::TYPE_CLOSE => Yii::t('common/account-state','Close'),
];
}
public static function findType($type){
$result = null;
$types = self::types();
if ( array_key_exists($type, $types)){
$result = $types[ $type ];
}
return $result;
}
/**
* Read last accountstates
* @param $type int the type of accountstate to load
* @param $user $id of user to load the account
* */
public static function readLast($type, $user = null){
$result = null;
$query = AccountState::find();
//filter user
if ( isset($user)){
$query->innerJoinWith("account");
$query->innerJoinWith("account.userAccountAssignments");
$query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id]);
}
//filter type
if ( isset($type)){
$query->andWhere(['account_state.type' => $type]);
}
//filter last
$query->join("INNER JOIN ",
"(select max(created_at) as cdate, id_account from account_state group by id_account) as sq1"
,"sq1.cdate = account_state.created_at and sq1.id_account = account_state.id_account");
$query->orderBy(['created_at' => SORT_DESC]);
$result = $query->all();
return $result;
}
function beforeSave($insert){
$result = parent::beforeSave($insert);
if ( $result ){
$prev = null;
if ( isset($this->prev_state) ){
$prev = AccountState::findOne($this->prev_state);
}
if ( $prev != null){
$this->prev_money = $prev->money;
}
}
return $result;
}
public function hasDifferenceToPrevState(){
$result = false;
if ( isset( $this->prev_state ) ){
$result = $this->prev_money != $this->money;
}
return $result;
}
public static function readLastForUser($type){
return static::readLast($type, Yii::$app->user->id);
}
public static function modelsToArray($models){
return ArrayHelper::toArray($models, [
'common\models\AccountState' => [
'id_account_state',
'id_account',
'money',
],
]);
}
}

View File

@@ -35,6 +35,9 @@ class Transfer extends \yii\db\ActiveRecord
const STATUS_NOT_PAID = 10;
const STATUS_PAID = 20;
const DIRECTION_IN = 10;// MONEY GOES OUT FROM ACCOUNT ( COMPANY LOST MONEY )
const DIRECTION_OUT = 20;//MONEY GOES IN TO THE ACCOUNT ( COMPANY EARN MONEY )
/**
* @inheritdoc
*/
@@ -62,6 +65,7 @@ class Transfer extends \yii\db\ActiveRecord
{
return [
'id_transfer' => Yii::t('common/transfer', 'Id Transfer'),
'id_account' => Yii::t('common/transfer', 'Account'),
'id_discount' => Yii::t('common/transfer', 'Id Discount'),
'id_currency' => Yii::t('common/transfer', 'Id Currency'),
'id_object' => Yii::t('common/transfer', 'Id Object'),

View File

@@ -186,6 +186,10 @@ class User extends ActiveRecord implements IdentityInterface
$this->password_reset_token = null;
}
public function getUserAccountAssignments(){
return $this->hasMany(UserAccountAssignment::className(), ['id_user' =>'id']);
}
static function statuses() {
return [
self::STATUS_ACTIVE => Yii::t('app', 'Aktív'),

View File

@@ -0,0 +1,45 @@
<?php
namespace common\models;
use Yii;
/**
* This is the model class for table "user_account_assignment".
*
* @property integer $id_user_account_assignment
* @property integer $id_user
* @property integer $id_account
*/
class UserAccountAssignment extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'user_account_assignment';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id_user', 'id_account'], 'integer']
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id_user_account_assignment' => Yii::t('common/user-account-assignment', 'Id User Account Assignment'),
'id_user' => Yii::t('common/user-account-assignment', 'Id User'),
'id_account' => Yii::t('common/user-account-assignment', 'Id Account'),
];
}
}