diff --git a/backend/views/customer/view.php b/backend/views/customer/view.php index 7c1f095..4974a4e 100644 --- a/backend/views/customer/view.php +++ b/backend/views/customer/view.php @@ -27,13 +27,11 @@ $this->params['breadcrumbs'][] = $this->title; ], [ 'attribute' => 'id_user', - 'value' => $model->username + 'value' => $model->username, + 'label' => 'Felhasználó' ], - 'id_partner_card', - 'id_proposer', 'name', 'email:email', - 'password', 'phone', [ 'attribute' => 'sex', @@ -44,8 +42,14 @@ $this->params['breadcrumbs'][] = $this->title; 'image', 'description', 'tax_number', - 'bank_name', - 'bank_account', + [ + 'attribute' => 'bank_name', + 'label' => 'Bank neve' + ], + [ + 'attribute' => 'bank_account', + 'label' => 'Bankszámlaszám' + ], 'country', 'zip', 'city', diff --git a/changelog.txt b/changelog.txt index f324f44..6e7231e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,6 @@ +-0.0.29 + - change daily listings to use paid_by instead id_user + - add customer cart details -0.0.28 - Add change customer card to reception customer update - Add customer tab to reception diff --git a/common/components/DailyListing.php b/common/components/DailyListing.php index 34ad974..b45f6cc 100644 --- a/common/components/DailyListing.php +++ b/common/components/DailyListing.php @@ -220,7 +220,7 @@ class DailyListing $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); if ( RoleDefinition::isReception() || !$this->isModeAdmin()){ - $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + $query->andWhere(['transfer.paid_by' => Yii::$app->user->id ]); } @@ -240,9 +240,8 @@ class DailyListing $query->andFilterWhere([ 'transfer.id_account' => $this->id_account, - 'transfer.id_user' => $this->id_user, 'transfer.type' => $this->type, - 'transfer.id_user' => $this->id_user, + 'transfer.paid_by' => $this->id_user, ]); $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; @@ -296,7 +295,7 @@ class DailyListing $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->groupBy([ 'user.id as user_id','user.username as user_username','ticket_type.id_ticket_type','ticket_type.name']); $this->addQueryFilters($query); @@ -312,7 +311,7 @@ class DailyListing $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['user.username' => SORT_ASC]); $this->addQueryFilters($query); $this->ticketMoneyByUser = $query->all(); @@ -414,7 +413,7 @@ class DailyListing $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->groupBy([ 'user.id as user_id','user.username as user_username','ticket_type.id_ticket_type','transfer.money']); $this->addQueryFilters($query); @@ -444,7 +443,7 @@ class DailyListing $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); $query->innerJoin("product", "sale.id_product = product.id_product"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->groupBy([ 'user.id as user_id','user.username as user_username','ticket_type.id_ticket_type','transfer.count' ,'product.sale_price','product.purchase_price']); $this->addQueryFilters($query); @@ -483,7 +482,7 @@ class DailyListing $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->groupBy([ 'user.id as user_id','user.username as user_username' ]); $this->addQueryFilters($query); @@ -496,7 +495,7 @@ class DailyListing $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->groupBy([ 'user.id as user_id','user.username as user_username','money_movement.type']); $this->addQueryFilters($query); @@ -517,7 +516,7 @@ class DailyListing $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -541,7 +540,7 @@ class DailyListing $query->innerJoin("product", "sale.id_product = product.id_product"); $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -560,7 +559,7 @@ class DailyListing $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); diff --git a/common/components/Helper.php b/common/components/Helper.php index d47e876..a288ebe 100644 --- a/common/components/Helper.php +++ b/common/components/Helper.php @@ -170,6 +170,9 @@ class Helper { $out = str_replace ( "Ö", "0", $out ); return $out; } + public static function isUserCartVisibilityUser() { + return \Yii::$app->params ['user_cart_item_visibility'] == 'user'; + } public static function isCompanyMovar() { return \Yii::$app->params ['company'] == 'movar'; } diff --git a/common/config/params.php b/common/config/params.php index aa10ba9..e125ea1 100644 --- a/common/config/params.php +++ b/common/config/params.php @@ -4,7 +4,7 @@ return [ 'supportEmail' => 'rocho02@gmail.com', 'infoEmail' => 'info@rocho-net.hu', 'user.passwordResetTokenExpire' => 3600, - 'version' => 'v0.0.28', + 'version' => 'v0.0.29', 'company' => 'movar',//gyor 'company_name' => "Freimann Kft.", 'product_visiblity' => 'account',// on reception which products to display. account or global @@ -16,5 +16,8 @@ return [ 'ugiro_duplom_kod' => 1, 'ugiro_kezdemenyezo_szamlaszam' => '5860025215371128', 'ugiro_kezdemenyezo_azonosito' => 'A25366936T244', - + //a recepicó kosár csak az aktuális user által kiadott termékeket tartalmazza + //vagy mindent + //értékek user|all + 'user_cart_item_visibility' => 'user', ]; diff --git a/common/models/ShoppingCart.php b/common/models/ShoppingCart.php index 8ab17b7..f57aaca 100644 --- a/common/models/ShoppingCart.php +++ b/common/models/ShoppingCart.php @@ -63,19 +63,26 @@ class ShoppingCart extends \yii\db\ActiveRecord return $transfers; } - public static function payout( $customer, $idTransfers) { + public static function payout( $customer, $idTransfers, $account = null) { //apply transfer object //delete cart $sql = "UPDATE transfer AS t INNER JOIN shopping_cart AS s ON t.id_transfer = s.id_transfer - SET t.paid_by = ".\Yii::$app->user->id.", t.status = " . Transfer::STATUS_PAID . ", t.paid_at = '" . date('Y-m-d H:i:s' ) ."'" - . " WHERE t.status = " . Transfer::STATUS_NOT_PAID + SET t.paid_by = ".\Yii::$app->user->id.", t.status = " . Transfer::STATUS_PAID . ", t.paid_at = '" . date('Y-m-d H:i:s' ) ."'"; + + if ( isset($account)){ + $sql .= " , id_account = " . $account; + } + + $sql .= " WHERE t.status = " . Transfer::STATUS_NOT_PAID . " and s.id_customer = " . $customer->id_customer . " and t.id_transfer in ( '" . implode("','", $idTransfers )."' )"; $q1 = Yii::$app->db->createCommand($sql); $q1->execute(); + + // ShoppingCart::deleteAll(['id_customer' => $customer->id_customer]); if ( isset($idTransfers) ){ diff --git a/common/models/Transfer.php b/common/models/Transfer.php index 082b0b4..a70c5e7 100644 --- a/common/models/Transfer.php +++ b/common/models/Transfer.php @@ -198,6 +198,23 @@ class Transfer extends \common\models\BaseFitnessActiveRecord { "id_sale" => "id_object" ] ); } + + public function getPaidByUser() { + return $this->hasOne ( User::className (), [ + "id" => "paid_by" + ] ); + } + + public function getPaidByName() { + $result = ""; + $user = $this->paidByUser; + if (isset ( $this->paidByUser )) { + $result = $user->username; + } + + return $result; + } + public function getObjectName() { $result = ""; if ($this->type == Transfer::TYPE_TICKET) { @@ -470,9 +487,11 @@ class Transfer extends \common\models\BaseFitnessActiveRecord { $query = Transfer::find (); $query->innerJoinWith ( 'userSoldItem' ); - $query->andWhere ( [ - 'user_sold_item.id_user' => $user->id - ] ); + if ( Helper::isUserCartVisibilityUser()){ + $query->andWhere ( [ + 'user_sold_item.id_user' => $user->id + ] ); + } $transfers = $query->all (); return $transfers; @@ -823,7 +842,7 @@ class Transfer extends \common\models\BaseFitnessActiveRecord { $query->from ( 'transfer' ); $query->innerJoin ( "account", "account.id_account = transfer.id_account" ); $query->andWhere ( [ - 'transfer.id_user' => $idUser + 'transfer.paid_by' => $idUser ] ); $created_condition = [ diff --git a/common/models/TransferListSearch.php b/common/models/TransferListSearch.php index e399eee..1bbe1d5 100644 --- a/common/models/TransferListSearch.php +++ b/common/models/TransferListSearch.php @@ -222,7 +222,7 @@ class TransferListSearch extends Transfer $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); if ( RoleDefinition::isReception() || !$this->isModeAdmin()){ - $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + $query->andWhere(['transfer.paid_by' => Yii::$app->user->id ]); } @@ -242,9 +242,8 @@ class TransferListSearch extends Transfer $query->andFilterWhere([ 'transfer.id_account' => $this->id_account, - 'transfer.id_user' => $this->id_user, 'transfer.type' => $this->type, - 'transfer.id_user' => $this->id_user, + 'transfer.paid_by' => $this->id_user, ]); $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; @@ -425,7 +424,7 @@ class TransferListSearch extends Transfer $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -449,7 +448,7 @@ class TransferListSearch extends Transfer $query->innerJoin("product", "sale.id_product = product.id_product"); $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -468,7 +467,7 @@ class TransferListSearch extends Transfer $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); - $query->innerJoin("user", "transfer.id_user = user.id"); + $query->innerJoin("user", "transfer.paid_by = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); diff --git a/common/models/TransferSaleSearch.php b/common/models/TransferSaleSearch.php index 72c7a79..147b92a 100644 --- a/common/models/TransferSaleSearch.php +++ b/common/models/TransferSaleSearch.php @@ -155,13 +155,13 @@ class TransferSaleSearch extends Transfer $query->andFilterWhere([ 'transfer.id_account' => $this->id_account, - 'transfer.id_user' => $this->id_user, 'transfer.type' => $this->type, - 'transfer.id_user' => $this->id_user, 'product_category.id_product_category' => $this->category, 'transfer.status' => $this->status, 'product.id_product' => $this->id_product, ]); + + $query->andFilterWhere( ['or' , ['transfer.id_user' => $this->id_user ] , ['transfer.paid_by' => $this->id_user]] ); $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; $paid_condition = ['and',[ '>=', 'transfer.paid_at', $this->timestampStart ] ,[ '<', 'transfer.paid_at', $this->timestampEnd ] ]; @@ -271,7 +271,7 @@ class TransferSaleSearch extends Transfer protected function readProducts(){ $query = (new \yii\db\Query()); - $query->select([ 'transfer.payment_method as transfer_payment_method', 'transfer.id_transfer as id_transfer', 'customer.name as customer_name' ,'user.username as user_name','account.name as account_name' , 'product_category.name as product_category_name', 'product.name as product_name', 'transfer.money AS product_money', 'transfer.count AS product_count', 'transfer.money AS product_money','transfer.item_price AS product_item_price', 'transfer.created_at as product_created_at','transfer.paid_at as product_paid_at']); + $query->select([ 'paid_by.username as paid_by_name', 'transfer.payment_method as transfer_payment_method', 'transfer.id_transfer as id_transfer', 'customer.name as customer_name' ,'user.username as user_name','account.name as account_name' , 'product_category.name as product_category_name', 'product.name as product_name', 'transfer.money AS product_money', 'transfer.count AS product_count', 'transfer.money AS product_money','transfer.item_price AS product_item_price', 'transfer.created_at as product_created_at','transfer.paid_at as product_paid_at']); $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); @@ -279,6 +279,7 @@ class TransferSaleSearch extends Transfer $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); $query->leftJoin("customer", "transfer.id_customer = customer.id_customer"); $query->innerJoin("user", "transfer.id_user = user.id"); + $query->leftJoin("user as paid_by", "transfer.paid_by = paid_by.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); diff --git a/common/models/TransferTicketSearch.php b/common/models/TransferTicketSearch.php index b69ae6d..fa4a74c 100644 --- a/common/models/TransferTicketSearch.php +++ b/common/models/TransferTicketSearch.php @@ -151,11 +151,11 @@ class TransferTicketSearch extends Transfer $query->andFilterWhere([ 'transfer.id_account' => $this->id_account, - 'transfer.id_user' => $this->id_user, 'transfer.type' => $this->type, - 'transfer.id_user' => $this->id_user, 'ticket_type.id_ticket_type' => $this->id_ticket_type, ]); + + $query->andFilterWhere( ['or' , ['transfer.id_user' => $this->id_user ] , ['transfer.paid_by' => $this->id_user]] ); $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; $paid_condition = ['and',[ '>=', 'transfer.paid_at', $this->timestampStart ] ,[ '<', 'transfer.paid_at', $this->timestampEnd ] ]; @@ -207,13 +207,14 @@ class TransferTicketSearch extends Transfer protected function readTickets(){ $query = (new \yii\db\Query()); - $query->select([ 'ticket.id_ticket as ticket_id_ticket', 'customer.name as customer_name', 'user.username as user_name', 'account.name as account_name','ticket_type.name as ticket_type_name' ,'ticket.status as ticket_status', 'transfer.count AS ticket_count', 'transfer.money AS ticket_money','transfer.item_price AS ticket_item_price', 'transfer.created_at as ticket_created_at','transfer.paid_at as ticket_paid_at']); + $query->select([ 'paid_by.username as paid_by_name', 'ticket.id_ticket as ticket_id_ticket', 'customer.name as customer_name', 'user.username as user_name', 'account.name as account_name','ticket_type.name as ticket_type_name' ,'ticket.status as ticket_status', 'transfer.count AS ticket_count', 'transfer.money AS ticket_money','transfer.item_price AS ticket_item_price', 'transfer.created_at as ticket_created_at','transfer.paid_at as ticket_paid_at']); $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); $query->innerJoin("user", "transfer.id_user = user.id"); + $query->leftJoin("user as paid_by", "transfer.paid_by = paid_by.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); diff --git a/common/models/UserSoldItem.php b/common/models/UserSoldItem.php index 5280fad..7b7ad3c 100644 --- a/common/models/UserSoldItem.php +++ b/common/models/UserSoldItem.php @@ -5,6 +5,7 @@ namespace common\models; use Yii; use yii\db\Query; use yii\db\Expression; +use common\components\Helper; /** * This is the model class for table "user_sold_item". @@ -89,27 +90,55 @@ class UserSoldItem extends \yii\db\ActiveRecord /** * @param common\models\User $user * */ - public static function payout( $user, $idTransfers = null ) { + public static function payout( $user, $idTransfers = null, $account = null ) { //apply transfer object //delete cart $sql = "UPDATE transfer AS t INNER JOIN user_sold_item AS s ON t.id_transfer = s.id_transfer - SET t.paid_by = ".$user->id.", t.status = " . Transfer::STATUS_PAID . ", t.paid_at = '" . date('Y-m-d H:i:s' ) ."'" - . " WHERE t.status = " . Transfer::STATUS_NOT_PAID - . " and s.id_user =" . $user->id ; + SET t.paid_by = ".$user->id.", t.status = " . Transfer::STATUS_PAID . ", t.paid_at = '" . date('Y-m-d H:i:s' ) ."' "; - if ( isset($idTransfers)){ - $sql .= " and t.id_transfer in ( '" . implode("','", $idTransfers )."' )"; - } + if ( isset($account)){ + $sql .= " , id_account = " . $account; + } + + $sql .= " WHERE t.status = " . Transfer::STATUS_NOT_PAID; + + //we can see all transfer in cart, or just our + if ( Helper::isUserCartVisibilityUser()){ + $sql .= " and s.id_user =" . $user->id ; + } + + //just payout selected transfers + if ( isset($idTransfers)){ + $sql .= " and t.id_transfer in ( '" . implode("','", $idTransfers )."' )"; + } $q1 = Yii::$app->db->createCommand($sql); $q1->execute(); + + $deleteConditions = []; + if ( isset($idTransfers) ){ - UserSoldItem::deleteAll(['and' ,['id_user' => Yii::$app->user->id] ,['in','id_transfer',$idTransfers] ]); - }else{ - UserSoldItem::deleteAll(['id_user' => Yii::$app->user->id]); + $deleteConditions[] = ['in','id_transfer',$idTransfers]; + } + + if ( Helper::isUserCartVisibilityUser()){ + $deleteConditions[] = ['id_user' => Yii::$app->user->id]; } + + if ( count($deleteConditions) > 1 ){ + // ['and', 'cond1','cond2'] + $deleteConditions = ["and"] + $deleteConditions; + }else if ( count($deleteConditions) == 1 ){ + //[a => b ] + $deleteConditions = $deleteConditions[0]; + }else{ + //[] + $deleteConditions = []; + } + UserSoldItem::deleteAll($deleteConditions); + } diff --git a/frontend/assets/TransferCustomerCartAsset.php b/frontend/assets/TransferCustomerCartAsset.php new file mode 100644 index 0000000..e071362 --- /dev/null +++ b/frontend/assets/TransferCustomerCartAsset.php @@ -0,0 +1,28 @@ + + * @since 2.0 + */ +class TransferCustomerCartAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + ]; + public $js = [ + 'js/transfer.customercart.js', + ]; + public $depends = [ + 'frontend\assets\AppAsset', + ]; +} diff --git a/frontend/controllers/ProductController.php b/frontend/controllers/ProductController.php index cd49da9..d451747 100644 --- a/frontend/controllers/ProductController.php +++ b/frontend/controllers/ProductController.php @@ -155,15 +155,15 @@ class ProductController extends Controller { } public function actionPayoutUserCart() { if (Yii::$app->request->isAjax) { - $result = [ ]; - \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; +// $result = [ ]; +// \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; - $user = User::findOne ( Yii::$app->user->id ); - UserSoldItem::payout ( $user ); +// $user = User::findOne ( Yii::$app->user->id ); +// UserSoldItem::payout ( $user ); - $userTransfers = Transfer::modelsToArray ( Transfer::readUserSoldTransfers ( $user ) ); - $result ['transfers'] = $userTransfers; - $result ['code'] = 'success'; +// $userTransfers = Transfer::modelsToArray ( Transfer::readUserSoldTransfers ( $user ) ); +// $result ['transfers'] = $userTransfers; +// $result ['code'] = 'success'; return $result; } else { @@ -175,7 +175,7 @@ class ProductController extends Controller { $connection = \Yii::$app->db; $transaction = $connection->beginTransaction (); try { - UserSoldItem::payout ( $user, $model->transfers ); + UserSoldItem::payout ( $user, $model->transfers , Account::readDefault() ); $transaction->commit (); \Yii::$app->session->setFlash ( 'success', 'Recepicó kosár fizetve' ); } catch ( Exception $e ) { @@ -231,7 +231,7 @@ class ProductController extends Controller { $connection = \Yii::$app->db; $transaction = $connection->beginTransaction (); try { - ShoppingCart::payout ( $this->customer, $model->transfers ); + ShoppingCart::payout ( $this->customer, $model->transfers , Account::readDefault()); $transaction->commit (); \Yii::$app->session->setFlash ( 'success', 'Vendég kosár kifizetve' ); } catch ( Exception $e ) { diff --git a/frontend/controllers/TransferController.php b/frontend/controllers/TransferController.php index f17128b..72ede21 100644 --- a/frontend/controllers/TransferController.php +++ b/frontend/controllers/TransferController.php @@ -20,6 +20,9 @@ use common\models\Product; use common\models\TransferTicketSearch; use common\models\TicketType; use frontend\models\UserCartForm; +use common\models\Customer; +use frontend\models\CustomerCartForm; +use common\models\Card; /** * TransferController implements the CRUD actions for Transfer model. @@ -191,10 +194,11 @@ class TransferController extends Controller $transfer->status = Transfer::STATUS_PAID; $transfer->paid_at = date('Y-m-d H:i:s' ) ; $transfer->paid_by = \Yii::$app->user->id; + $transfer->id_account = Account::readDefault(); ShoppingCart::deleteAll([ 'id_transfer' => $transfer->id_transfer]); UserSoldItem::deleteAll([ 'id_transfer' => $transfer->id_transfer]); if ( $transfer->save() ){ - \Yii::$app->session->setFlash( 'success','Tranzakció kifizetve' ); + \Yii::$app->session->setFlash( 'success','Tranzakció kifizetve!' ); $transaction->commit(); }else{ throw new \Exception("Failed to save"); @@ -342,6 +346,12 @@ class TransferController extends Controller public function actionUserCart(){ + $defaultAccount = Account::readDefault(); + + if ( !isset($defaultAccount)){ + return $this->redirect(['account/select']); + } + $model = new UserCartForm(); if ($model->load(Yii::$app->request->post()) && $model->payout()) { return $this->redirect(['user-cart']); @@ -349,4 +359,30 @@ class TransferController extends Controller $model->run(); return $this->render("usercart",[ 'model' => $model]); } + public function actionCustomerCart($id_card){ + + $defaultAccount = Account::readDefault(); + + if ( !isset($defaultAccount)){ + return $this->redirect(['account/select']); + } + + $customer = null; + $card = Card::findOne($id_card); + if ($card != null ) + $customer = $card->customer; + + + if ( !isset($customer) ){ + throw new NotFoundHttpException ( 'Az oldal nem található' ); + } + + $model = new CustomerCartForm(); + $model->customer = $customer; + if ($model->load(Yii::$app->request->post()) && $model->payout()) { + return $this->redirect(['customer-cart','id_card' => $model->customer->card->id_card]); + } + $model->run(); + return $this->render("customercart",[ 'model' => $model]); + } } diff --git a/frontend/models/CustomerCartForm.php b/frontend/models/CustomerCartForm.php new file mode 100644 index 0000000..807e091 --- /dev/null +++ b/frontend/models/CustomerCartForm.php @@ -0,0 +1,107 @@ + ['integer']], + [['money' ,'payment_method'],'integer'], + [['payment_method'],'validatePaymentMethod'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + ]; + } + + public function validatePaymentMethod( $attribute, $params ){ + if ( !empty($this->payment_method)){ +// echo $this->payment_method; + $arr = Transfer::paymentMethods(); + if ( !array_key_exists($this->payment_method, $arr) ){ + $this->addError($attribute, "Érvénytelen fizetési mód"); + } + } + } + + + public function payout(){ + $valid = $this->validate(); + + if ( !$valid ){ + return false; + } + + if ( isset($this->selected) && count($this->selected) > 0 ){ + $items = $this->loadTransfers($this->selected); + if ( count($items) == count($this->selected) ){ + foreach ($items as $item){ + $this->changePaymentMethod($item); + $item->id_account = Account::readDefault(); + $item->payout(); + } + \Yii::$app->session->setFlash('success', 'Kifizetve'); + return true; + }else{ + \Yii::$app->session->setFlash('danger', 'Időközben változtak a kosrában található tételek'); + return false; + } + }else{ + \Yii::$app->session->setFlash('danger', 'Nem választott ki terméket'); + return false; + } + } + + public function changePaymentMethod($item){ + if ( !empty($this->payment_method)){ + $item->payment_method = $this->payment_method; + } + } + + public function run(){ + $this->readTransfers(); + } + + public function readTransfers( ) { + $this->transfers = $this->loadTransfers(); + } + + public function loadTransfers($id_tranfer_array = null){ + $query = Transfer::find(); + $query->innerJoin("shopping_cart", "shopping_cart.id_transfer = transfer.id_transfer"); +// $query->andWhere(["transfer.id_user" => \Yii::$app->user->id]); + $query->andWhere(["shopping_cart.id_customer" => $this->customer->id_customer]); + if (isset($id_tranfer_array)){ + $query->andWhere(["in", "transfer.id_transfer" , $id_tranfer_array ]); + } + return $query->all(); + } + +} diff --git a/frontend/models/TransferSearch.php b/frontend/models/TransferSearch.php index 5116cca..85889ba 100644 --- a/frontend/models/TransferSearch.php +++ b/frontend/models/TransferSearch.php @@ -77,7 +77,7 @@ class TransferSearch extends Transfer // uncomment the following line if you do not want to return any records when validation fails $query->where('0=1'); } - $query->andWhere(['id_user' => Yii::$app->user->id ] ); + $query->andWhere( ['or',['id_user' => Yii::$app->user->id ] , ['paid_by' => Yii::$app->user->id],] ); $query->andFilterWhere([ 'id_account' => $this->id_account, diff --git a/frontend/models/UserCartForm.php b/frontend/models/UserCartForm.php index 2b8c785..92f031a 100644 --- a/frontend/models/UserCartForm.php +++ b/frontend/models/UserCartForm.php @@ -5,6 +5,8 @@ namespace frontend\models; use Yii; use yii\base\Model; use common\models\Transfer; +use common\components\Helper; +use common\models\Account; /** * ContactForm is the model behind the contact form. @@ -62,6 +64,7 @@ class UserCartForm extends Model if ( count($items) == count($this->selected) ){ foreach ($items as $item){ $this->changePaymentMethod($item); + $item->id_account = Account::readDefault(); $item->payout(); } \Yii::$app->session->setFlash('success', 'Kifizetve'); @@ -93,7 +96,9 @@ class UserCartForm extends Model public function loadTransfers($id_tranfer_array = null){ $query = Transfer::find(); $query->innerJoin("user_sold_item", "user_sold_item.id_transfer = transfer.id_transfer"); - $query->andWhere(["user_sold_item.id_user" => \Yii::$app->user->id]); + if ( Helper::isUserCartVisibilityUser()){ + $query->andWhere(["user_sold_item.id_user" => \Yii::$app->user->id]); + } if (isset($id_tranfer_array)){ $query->andWhere(["in", "transfer.id_transfer" , $id_tranfer_array ]); } diff --git a/frontend/views/common/_customer_tab.php b/frontend/views/common/_customer_tab.php index 8521b8e..41478fe 100644 --- a/frontend/views/common/_customer_tab.php +++ b/frontend/views/common/_customer_tab.php @@ -20,6 +20,7 @@ $items = [ [ 'Befizetések', ['ticket/index', 'number' => $card->number] ], [ 'Kulcsok', ['key/index', 'id_card' => $card->id_card] ], [ 'Szerződések', ['contract/index', 'id_card' => $card->id_card ]], + [ 'Kosár', ['transfer/customer-cart', 'id_card' => $card->id_card ]], ]; diff --git a/frontend/views/product/_customer_cart.php b/frontend/views/product/_customer_cart.php index 92bb0b9..5a862e0 100644 --- a/frontend/views/product/_customer_cart.php +++ b/frontend/views/product/_customer_cart.php @@ -41,4 +41,7 @@ use yii\widgets\ActiveForm;
'btn btn-primary btn-block' , 'onclick' => 'location.reload();']) ?>
+
+ $model->customer->card->id_card],[ 'class' => 'btn btn-primary btn-block' , 'onclick' => 'location.reload();']) ?> +
diff --git a/frontend/views/ticket/_customer_cart.php b/frontend/views/ticket/_customer_cart.php index f6d713e..f31110a 100644 --- a/frontend/views/ticket/_customer_cart.php +++ b/frontend/views/ticket/_customer_cart.php @@ -39,4 +39,7 @@ use kartik\widgets\ActiveForm;
'btn btn-primary btn-block' , 'onclick' => 'location.reload();']) ?>
+
+ $model->customer->card->id_card],[ 'class' => 'btn btn-primary btn-block' , 'onclick' => 'location.reload();']) ?> +
\ No newline at end of file diff --git a/frontend/views/ticket/_user_cart.php b/frontend/views/ticket/_user_cart.php index f0393ac..92aa89d 100644 --- a/frontend/views/ticket/_user_cart.php +++ b/frontend/views/ticket/_user_cart.php @@ -41,4 +41,7 @@ use kartik\widgets\ActiveForm;
'btn btn-primary btn-block' , 'onclick' => 'location.reload();']) ?>
+
+ 'btn btn-primary btn-block' ]) ?> +
\ No newline at end of file diff --git a/frontend/views/ticket/create.php b/frontend/views/ticket/create.php index d500230..2e107fb 100644 --- a/frontend/views/ticket/create.php +++ b/frontend/views/ticket/create.php @@ -66,7 +66,7 @@ $this->registerJs ( 'new TicketSell( '. json_encode($options).');' );
isCardWithCustomer() ){ ?> - render('_customer_cart' ) ?> + render('_customer_cart' ,['model' => $receptionForm]) ?> render('_user_cart' ) ?>
diff --git a/frontend/views/transfer/_view.php b/frontend/views/transfer/_view.php index 836357c..19d9f29 100644 --- a/frontend/views/transfer/_view.php +++ b/frontend/views/transfer/_view.php @@ -20,10 +20,13 @@ $formatter = Yii::$app->formatter; -
getAttributeLabel( 'id_transfer') ?>
+
-
getAttributeLabel( 'created_at') ?>
+
getAttributeLabel( 'payment_method') ?>
+
+ +
asDatetime( Html::getAttributeValue($model, 'created_at') ) ?>
getAttributeLabel( 'paid_at') ?>
@@ -31,9 +34,9 @@ $formatter = Yii::$app->formatter;
getAttributeLabel( 'status') ?>
+
+
-
getAttributeLabel( 'payment_method') ?>
-
@@ -44,8 +47,10 @@ $formatter = Yii::$app->formatter;
Megnevezés
-
getAttributeLabel( 'id_user') ?>
+
+
+
getAttributeLabel( 'id_customer') ?>
diff --git a/frontend/views/transfer/customercart.php b/frontend/views/transfer/customercart.php new file mode 100644 index 0000000..fd05e47 --- /dev/null +++ b/frontend/views/transfer/customercart.php @@ -0,0 +1,114 @@ + +registerJs ( 'new TransferCustomerCart( '. json_encode($options).');' ); + $dp = new ArrayDataProvider( + [ + 'allModels' => $model->transfers, + 'pagination' => false + + ] + ); + $this->params['breadcrumbs'][] = "Vendég Kosár"; + +?> + + $model->customer->card])?> + +
+ +field($model, 'payment_method')->dropDownList( ['' => 'Aktuális'] + Transfer::paymentMethods())->label("Fizetése mód") ?> +
+
+ Összesen: + money ?> + Ft + field($model, "money" , [ ])->hiddenInput()->label(false); ?> +
+ +
+
+ 'btn btn-primary select-all' ,'style' => 'margin-right: 6px;']); +echo Html::a("Egyiket sem",null, ['class' => 'btn btn-primary deselect-all']); + +?> +
+ + $dp, + 'columns' =>[ + [ + 'label' => '', + 'value' => function ($model, $key, $index, $column) use (&$form, &$formModel){ + + return Html::checkbox(Html::getInputName($formModel, 'selected[]') , in_array($model->id_transfer, $formModel->selected) , [ 'data-money' => $model->money, 'class' => 'cart-item', 'value' => $model->id_transfer] ); + }, + 'format' => 'raw' + ], + [ + 'value' => 'created_at', + 'label' => 'Kiadva', + 'format' => 'datetime' + ], + [ + 'value' => 'user.username', + 'label' => 'Kiadta', + ], + [ + 'value' => 'transferTypeName', + 'label' => 'Típus' + ], + [ + 'value' => 'objectName', + 'label' => 'Megnevezés' + ], + [ + 'value' => 'item_price', + 'label' => 'Egység ár' + ], + [ + 'value' => 'count', + 'label' => 'Mennyiség' + ], + [ + 'value' => 'money', + 'label' => 'Összesen' + ], + [ + 'value' => 'paymentMethodName', + 'label' => 'Fizetési mód' + ], + ] +]); + + +?> +
+ 'btn btn-primary']) ?> +
+

+ A kifizetés az alapértelmezett kasszához lesz elszámolva +

+ + +
\ No newline at end of file diff --git a/frontend/views/transfer/sale.php b/frontend/views/transfer/sale.php index f059cdb..914bd20 100644 --- a/frontend/views/transfer/sale.php +++ b/frontend/views/transfer/sale.php @@ -72,7 +72,8 @@ td.name { F. mód Fizetve Kassza - Felhasználó + Kiadta + Fizette Vásárló Kategória Termék @@ -90,6 +91,7 @@ td.name { + diff --git a/frontend/views/transfer/tickets.php b/frontend/views/transfer/tickets.php index 45c3e50..6d2551b 100644 --- a/frontend/views/transfer/tickets.php +++ b/frontend/views/transfer/tickets.php @@ -71,7 +71,8 @@ td.name { Kiadva Fizetve Kassza - Felhasználó + Kiadta + Fizette Vendég Bérlet típus Státusz @@ -85,15 +86,16 @@ td.name { - - - - - - - Ft - Db - FT + + + + + + + + Ft + Db + FT diff --git a/frontend/views/transfer/usercart.php b/frontend/views/transfer/usercart.php index 881e826..5557b11 100644 --- a/frontend/views/transfer/usercart.php +++ b/frontend/views/transfer/usercart.php @@ -24,7 +24,7 @@ $this->registerJs ( 'new TransferUserCart( '. json_encode($options).');' ); ); ?> -

Kosár

+

Recepció kosár

field($model, 'payment_method')->dropDownList( ['' => 'Aktuális'] + Transfer::paymentMethods())->label("Fizetése mód") ?> @@ -33,13 +33,18 @@ $this->registerJs ( 'new TransferUserCart( '. json_encode($options).');' ); Összesen: money ?> Ft - field($model, "money" , [ ])->hiddenInput(); ?> + field($model, "money" , [ ])->hiddenInput()->label(false); ?>
- +
'btn btn-primary select-all' ,'style' => 'margin-right: 6px;']); +echo Html::a("Egyiket sem",null, ['class' => 'btn btn-primary deselect-all']); +?> +
+ 'raw' ], + [ + 'value' => 'created_at', + 'label' => 'Kiadva', + 'format' => 'datetime' + ], + [ + 'value' => 'user.username', + 'label' => 'Kiadta', + ], + [ + 'value' => 'accountName', + 'label' => 'Kassza' + ], [ 'value' => 'transferTypeName', 'label' => 'Típus' @@ -85,6 +103,8 @@ echo GridView::widget([
'btn btn-primary']) ?>
- +

+ A kifizetés az alapértelmezett kasszához lesz elszámolva +

\ No newline at end of file diff --git a/frontend/web/js/transfer.customercart.js b/frontend/web/js/transfer.customercart.js new file mode 100644 index 0000000..9dcd881 --- /dev/null +++ b/frontend/web/js/transfer.customercart.js @@ -0,0 +1,63 @@ +function TransferCustomerCart(o){ + + var defaults = {}; + + init(); + + function init(){ + defaults = $.extend(defaults,o); + $('.select-on-check-all').click(recalculate); + $('.cart-item').click(recalculate); + $('.select-all').click(selectAll); + $('.deselect-all').click(deselectAll); + } + + function selectAll(){ + var table; + table = $('.grid-view').find('table'); + + table.find('input').prop('checked',true); + recalculate(); + } + function deselectAll(){ + var table; + table = $('.grid-view').find('table'); + + table.find('input').prop('checked',false); + recalculate(); + } + + function recalculate(){ + var items = $('.cart-item'); + var money = 0; + items.each(function(i,e){ + if ( $(e).is(':checked')){ + money += $(e).data('money'); + } + }); + $('#customercartform-money').val(money); + $('.selected-money').html(money); + selectRows(); + } + + function selectRows(){ + + var table; + var rows; + table = $('.grid-view').find('table'); + + rows = table.find('tbody').find('tr'); + rows.removeClass('info'); + rows.each(function(i,e){ + var cb; + var selected; + var row; + row = $(e); + cb = row.find('td').eq(0).find('input'); + selected = cb.is(':checked'); + if ( selected){ + row.addClass('info'); + } + }); + } +} \ No newline at end of file diff --git a/frontend/web/js/transfer.usercart.js b/frontend/web/js/transfer.usercart.js index c5264e2..e969f32 100644 --- a/frontend/web/js/transfer.usercart.js +++ b/frontend/web/js/transfer.usercart.js @@ -8,6 +8,23 @@ function TransferUserCart(o){ defaults = $.extend(defaults,o); $('.select-on-check-all').click(recalculate); $('.cart-item').click(recalculate); + $('.select-all').click(selectAll); + $('.deselect-all').click(deselectAll); + } + + function selectAll(){ + var table; + table = $('.grid-view').find('table'); + + table.find('input').prop('checked',true); + recalculate(); + } + function deselectAll(){ + var table; + table = $('.grid-view').find('table'); + + table.find('input').prop('checked',false); + recalculate(); } function recalculate(){ @@ -20,6 +37,28 @@ function TransferUserCart(o){ }); $('#usercartform-money').val(money); $('.selected-money').html(money); + selectRows(); + } + + function selectRows(){ + + var table; + var rows; + table = $('.grid-view').find('table'); + + rows = table.find('tbody').find('tr'); + rows.removeClass('info'); + rows.each(function(i,e){ + var cb; + var selected; + var row; + row = $(e); + cb = row.find('td').eq(0).find('input'); + selected = cb.is(':checked'); + if ( selected){ + row.addClass('info'); + } + }); }