add changes to create ticket

This commit is contained in:
2015-10-08 10:13:29 +02:00
parent 2e906de8c2
commit c3ae414bba
21 changed files with 650 additions and 45 deletions

View File

@@ -0,0 +1,31 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class TicketSellAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = [
'js/transferlist.js',
'js/ticket.sell.js',
];
public $depends = [
'frontend\assets\AppAsset',
'common\assets\MomentAsset',
'yii\jui\JuiAsset',
];
}

View File

@@ -0,0 +1,43 @@
<?php
namespace frontend\components;
use Yii;
use common\models\Order;
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
class HtmlHelper{
private static function mkOptions( $models, $key, $value = 'name', $options = [] ){
$result = [];
$result = ArrayHelper::map($models, $key, $value);
return $result;
}
/**
* @var $models common\models\Account[]
* @return
* */
public static function mkAccountOptions( $models, $options = [] ){
return $result = self::mkOptions($models, 'id_account');
}
/**
* @var $models common\models\Discount[]
* @return
* */
public static function mkDiscountOptions( $models, $options = [] ){
return $result = self::mkOptions($models, 'id_discount');
}
/**
* @var $models common\models\TicketType[]
* @return
* */
public static function mkTicketTypeOptions( $models, $options = [] ){
return $result = self::mkOptions($models, 'id_ticket_type');
}
}

View File

@@ -5,9 +5,17 @@ namespace frontend\controllers;
use Yii;
use common\models\Ticket;
use frontend\models\TicketSearch;
use frontend\models\ReceptionForm;
use frontend\models\TicketCreate;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use common\models\Discount;
use common\models\TicketType;
use common\models\Account;
use yii\base\Object;
use common\models\Transfer;
use common\models\User;
/**
* TicketController implements the CRUD actions for Ticket model.
@@ -58,15 +66,43 @@ class TicketController extends Controller
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
public function actionCreate($number = null)
{
$model = new Ticket();
$receptionForm = new ReceptionForm();
$receptionForm->number = $number;
$receptionForm->readCard();
$model = new TicketCreate();
$discounts = Discount::read();
$ticketTypes = TicketType::read();
$accounts = Account::readAccounts();
$user = User::findOne( [ 'id' => Yii::$app->user->id ] );
$model->id_user = \Yii::$app->user->id;
$model->status = Ticket::STATUS_ACTIVE;
$model->usage_count = 0;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id_ticket]);
} else {
$userTransfers = Transfer::modelsToArray( Transfer::readUserSoldTransfers($user) );
return $this->render('create', [
'model' => $model,
'discounts' => $discounts,
'ticketTypes' => $ticketTypes,
'accounts' => $accounts,
'receptionForm' => $receptionForm,
'userTransfers' => $userTransfers,
]);
}
}

View File

@@ -0,0 +1,76 @@
<?php
namespace frontend\models;
use common\models\Ticket;
use common\models\TicketType;
use common\models\Account;
use common\models\Discount;
class TicketCreate extends Ticket{
public function rules()
{
return [
/////////////////////
//ticket type
/////////////////////
[[ 'id_ticket_type'], 'required'],
[[ 'id_ticket_type'], 'integer'],
[[ 'id_ticket_type'], 'validateTicketType'],
/////////////////////
//id_account
/////////////////////
[[ 'id_account'], 'required'],
[[ 'id_account'], 'integer'],
[[ 'id_account'], 'validateAccount'],
/////////////////////
//id_discount
/////////////////////
[[ 'id_discount'], 'integer'],
[[ 'id_discount'], 'validateDiscount'],
/////////////////////
// start and end date
/////////////////////
[['start', 'end' ], 'required'],
[['start', 'end' ], 'date'],
/////////////////////
//id_account
/////////////////////
[[ 'max_usage_count'], 'required'],
[[ 'max_usage_count'], 'integer'],
/////////////////////
//price
/////////////////////
[[ 'price_brutto'], 'required'],
[[ 'price_brutto'], 'integer'],
/////////////////////
//comment
/////////////////////
[['comment'], 'required'],
[['comment'], 'string', 'max' => 255]
];
}
public function validateTicketType($attribute,$params){
$type = TicketType::findOne($this->id_ticket_type);
if ( !isset($type)) {
$this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid ticket type' ));
}
}
public function validateAccount($attribute,$params){
$acc = Account::findOne($this->id_account);
if ( !isset($acc)) {
$this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid transfer' ));
}
}
public function validateDiscount($attribute,$params){
$discount = Discount::findOne($this->id_discount);
if ( !isset($discount)) {
$this->addError($attribute,Yii::t('frontend/ticket' , 'Invalid discount' ));
}
}
}

View File

@@ -66,7 +66,7 @@ function mkBtn($card, $label,$route = null ){
<?php echo mkCustomerBtn( $card, Yii::t( 'frontend/customer' , 'Befizetések') , 'ticket/index'); ?>
</div>
<div class='col-md-4'>
<?php echo Html::a(Html::tag("i","", [ 'class' => 'glyphicon glyphicon-plus' ] ) , 'ticket/create' , ['class' => 'btn btn-primary btn-reception'] )?>
<?php echo Html::a(Html::tag("i","", [ 'class' => 'glyphicon glyphicon-plus' ] ) , Url::toRoute('ticket/create') , ['class' => 'btn btn-primary btn-reception'] ) ?>
</div>
</div>
<div class='row'>

View File

@@ -0,0 +1,9 @@
<?php
use yii\bootstrap\Html;
?>
<div class="row">
<div class='col-md-12 '>
<div class="transfer-list-container">
</div>
</div>
</div>

View File

@@ -8,6 +8,8 @@ use frontend\components\ReceptionCardNumberWidget;
/* @var $this yii\web\View */
/* @var $model common\models\Customer */
$this->title = Yii::t('common/customer', 'Create Customer');
$this->params['breadcrumbs'][] = ['label' => Yii::t('common/customer', 'Customers'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
@@ -16,6 +18,9 @@ $this->params['breadcrumbs'][] = $this->title;
$customer = $model;
$card = $customer->card;
?>
<div class="customer-create">

View File

@@ -2,46 +2,68 @@
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use frontend\components\HtmlHelper;
use kartik\widgets\DatePicker;
/* @var $this yii\web\View */
/* @var $model common\models\Ticket */
/* @var $accounts common\models\Account[] */
/* @var $ticketTypes common\models\TicketType[] */
/* @var $discounts common\models\Discount[] */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="ticket-form">
<?php
<?php $form = ActiveForm::begin(); ?>
$accountOptions = HtmlHelper::mkAccountOptions($accounts);
$discountOptions = HtmlHelper::mkDiscountOptions($discounts);
$ticketTypeOptions = HtmlHelper::mkTicketTypeOptions($ticketTypes);
?>
<?= $form->field($model, 'id_user')->textInput() ?>
<?= $form->field($model, 'id_ticket_type')->textInput() ?>
<?= $form->field($model, 'id_account')->textInput() ?>
<?= $form->field($model, 'id_discount')->textInput() ?>
<?= $form->field($model, 'start')->textInput() ?>
<?= $form->field($model, 'end')->textInput() ?>
<?= $form->field($model, 'max_usage_count')->textInput() ?>
<?= $form->field($model, 'usage_count')->textInput() ?>
<?= $form->field($model, 'status')->textInput() ?>
<?= $form->field($model, 'price_brutto')->textInput() ?>
<?= $form->field($model, 'comment')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'created_at')->textInput() ?>
<?= $form->field($model, 'updated_at')->textInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('common/ticket', 'Create') : Yii::t('common/ticket', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
<div class="row" >
<div class="col-md-12" >
<div class="ticket-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'id_ticket_type')->dropDownList($ticketTypeOptions) ?>
<?= $form->field($model, 'id_account')->dropDownList($accountOptions) ?>
<?= $form->field($model, 'id_discount')->dropDownList($discountOptions) ?>
<?= $form->field($model, 'start')->widget(DatePicker::classname(), [
'pluginOptions' => [
'autoclose'=>true,
'format' => 'yyyy.mm.dd'
]
]) ?>
<?= $form->field($model, 'end')->widget(DatePicker::classname(), [
'pluginOptions' => [
'autoclose'=>true,
'format' => 'yyyy.mm.dd'
]
]) ?>
<?= $form->field($model, 'max_usage_count')->input('number') ?>
<?= $form->field($model, 'price_brutto')->input('number') ?>
<?= $form->field($model, 'comment')->textarea(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('common/ticket', 'Create') : Yii::t('common/ticket', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>

View File

@@ -1,21 +1,63 @@
<?php
use yii\helpers\Html;
use frontend\components\ReceptionMenuWidget;
use frontend\components\ReceptionCardNumberWidget;
use frontend\assets\TicketSellAsset;
use common\models\TicketType;
/* @var $this yii\web\View */
/* @var $model common\models\Ticket */
/* @var $receptionForm frotned\models\ReceptionForm */
TicketSellAsset::register($this);
$this->title = Yii::t('common/ticket', 'Create Ticket');
$this->params['breadcrumbs'][] = ['label' => Yii::t('common/ticket', 'Tickets'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
$card = $receptionForm->card;
$customer = $receptionForm->customer;
$options = [];
// $options['lookup_product_url'] = Url::toRoute(['product/lookup']);
// $options['clear_list_url'] = Url::toRoute(['product/clear-list']);
$options['types'] = TicketType::modelsToArray($ticketTypes);
$options['transfer_list'] = $userTransfers;
$this->registerJs ( 'new TicketSell( '. json_encode($options).');' );
?>
<div class="ticket-create">
<h1><?= Html::encode($this->title) ?></h1>
<div class='row'>
<div class='col-md-3'>
<?php echo ReceptionMenuWidget::widget( [ 'customer' => $customer, 'card' => $card] ) ?>
</div>
<div class='col-md-4'>
<?php echo ReceptionCardNumberWidget::widget( [ 'customer' => $customer, 'card' =>$card, 'route' => ['customer/reception'] ] )?>
</div>
<div class='col-md-4'>
</div>
</div>
<?= $this->render('_form', [
'model' => $model,
]) ?>
<div class="row">
<div class="col-md-6">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
'discounts' => $discounts,
'ticketTypes' => $ticketTypes,
'accounts' => $accounts,
]) ?>
</div>
<div class="col-md-6">
<h1><?php echo Yii::t('frontend/tciket', 'Cart')?></h1>
<?php echo $this->render( "//common/_transfer_list" ) ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,17 @@
(function() {
var KeypressListener;
KeypressListener = (function() {
function KeypressListener(name) {
this.name = name;
}
KeypressListener.prototype.listen = function() {};
return KeypressListener;
})();
}).call(this);
//# sourceMappingURL=frontend.js.map

View File

@@ -0,0 +1,10 @@
{
"version": 3,
"file": "frontend.js",
"sourceRoot": "../coffee/",
"sources": [
"keypresslistener.coffee"
],
"names": [],
"mappings": "AAAA;AAAA,MAAA;;EAAM;IAEQ,0BAAC,IAAD;MAAC,IAAC,CAAA,OAAD;IAAD;;+BAEb,MAAA,GAAQ,SAAA,GAAA;;;;;AAJT"
}

View File

@@ -0,0 +1,154 @@
function TicketSell(o){
/**reference for the instance*/
var app = this;
this.defaults = {
default_type: 0,
selected_type: 1,
time_unit_day : 10,
time_unit_month : 20,
time_unit_month_reference : 30,
/**id of filter text*/
types: [{
name :'Bérlet',
id_ticket_type: 0,
max_usage_count:0,
time_unit_type:1,
time_unit_count:1,
id_account:0,
price_brutto:1000,
},
],
selector_type: '#ticketcreate-id_ticket_type',
selector_start: '#ticketcreate-start',
selector_end: '#ticketcreate-end',
selector_account: '#ticketcreate-id_account',
selector_price: '#ticketcreate-price_brutto',
selector_max_usage_count: '#ticketcreate-max_usage_count',
date_format_moment: 'YYYY.MM.DD',
ticket_type: null,
start_date: null,
end_date: null,
max_usage_count: null,
id_account: null,
price: null,
clear_list_url: '',
transfer_list: []
};
init();
function init(){
$.extend(app.defaults, o );
addBehaviourTypeChangedListener();
useDefaults();
createUserSoldItemsTable();
}
function useDefaults(){
if ( app.defaults.selected_type > 0){
$(app.defaults.selector_type).val( app.defaults.selected_type );
typeChanged();
}
}
function createUserSoldItemsTable(){
$('.transfer-list-container').transferList({
'transfers' : app.defaults.transfer_list
});
}
function refreshSoldUseritems(){
$('.transfer-list-container').transferList('option','transfers' , app.defaults.sold_items );
}
function addBehaviourTypeChangedListener(){
$(app.defaults.selector_type).change(change);
}
function change(event){
if ( '#'+event.target.id == app.defaults.selector_type ){
typeChanged();
}
}
function typeChanged(){
validateTypeChanged();
refresh();
}
function validateTypeChanged(){
validateType();
validateStartDate();
validateEndDate();
validateMaxUsageCount();
validatePriceBrutto();
validateAccount();
}
function validateType(){
var type;
type = +$(app.defaults.selector_type).val();
app.defaults.ticket_type = null;
for ( var i = 0; i < app.defaults.types.length; i++ ){
if ( app.defaults.types[i].id_ticket_type == type){
app.defaults.ticket_type = app.defaults.types[i];
break;
}
}
}
function validateStartDate(){
app.defaults.start_date = moment( $( app.defaults.selector_start ).val(), app.defaults.date_format_moment) ;
if ( !app.defaults.start_date.isValid() ){
app.defaults.start_date = moment();
}
}
function validateEndDate(){
var units;
units = app.defaults.ticket_type.time_unit_count;
app.defaults.end_date = moment(app.defaults.start_date);
switch(app.defaults.ticket_type.time_unit_type){
case app.defaults.time_unit_day:
app.defaults.end_date.add( units, 'days');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month:
app.defaults.end_date.add( units, 'month');
app.defaults.end_date.subtract( 1, 'days');
break;
case app.defaults.time_unit_month_reference:
if ( units > 1){
app.defaults.end_date.add( units -1, 'month');
}
app.defaults.end_date.endOf('month');
break;
}
}
function validateMaxUsageCount(){
app.defaults.max_usage_count = app.defaults.ticket_type.max_usage_count;
}
function validatePriceBrutto(){
app.defaults.price = app.defaults.ticket_type.price_brutto;
}
function validateAccount(){
app.defaults.id_account = app.defaults.ticket_type.id_account;
}
function refresh(){
console.info( app.defaults.start_date.toDate());
$(app.defaults.selector_start ).val( app.defaults.start_date.format( app.defaults.date_format_moment ) );
$(app.defaults.selector_end ).val( app.defaults.end_date.format( app.defaults.date_format_moment ) );
$(app.defaults.selector_account ).val(app.defaults.id_account);
$(app.defaults.selector_price ).val(app.defaults.price);
$(app.defaults.selector_max_usage_count ).val(app.defaults.max_usage_count);
}
}