add coronavirus activate/inactivate

This commit is contained in:
2020-04-20 09:10:18 +02:00
parent e7e4183221
commit 5d847e2538
13 changed files with 628 additions and 10 deletions

View File

@@ -2,6 +2,8 @@
namespace frontend\controllers;
use backend\models\CustomerActivateForm;
use frontend\models\SingleCustomerActivateForm;
use frontend\models\TowelForm;
use Yii;
use common\models\Customer;
@@ -35,7 +37,7 @@ class CustomerController extends Controller
],
'access' => [
'class' => \yii\filters\AccessControl::className(),
'only' => ['create', 'update','reception','contract','towel'],
'only' => ['create', 'update','reception','contract','towel','activate'],
'rules' => [
// allow authenticated users
[
@@ -49,6 +51,23 @@ class CustomerController extends Controller
];
}
public function actionActivate($number = "")
{
$model = new ReceptionForm();
$model->number = $number;
$model->readCard();
$form = new SingleCustomerActivateForm( );
$form->number = $number;
$form->validate();
$ticketsDataProvider = $form->loadTicketsDataProvider();
if (\Yii::$app->request->isPost && $form->activate()) {
return $this->redirect(['customer/activate', 'number' => $number]);
}
return $this->render('activate', ['model' => $model, 'formModel' => $form, 'ticketsDataProvider' => $ticketsDataProvider]);
}
public function actionReception($number = ""){
$model = new ReceptionForm();

View File

@@ -0,0 +1,134 @@
<?php
namespace frontend\models;
use common\models\Card;
use common\models\Ticket;
use Yii;
use yii\base\Model;
use yii\data\ArrayDataProvider;
use yii\db\Query;
/**
* Class SingleCustomerActivateForm
* @package backend\models
*
* @property Card $card
*
*/
class SingleCustomerActivateForm extends Model{
public $message ;
public $number ;
public $card;
public $tickets;
public $daysPassed;
public function rules()
{
return [
[['number'], 'required'],
];
}
public function loadTicketsToActivate(){
$this->card = Card::readCard($this->number);
$query = new Query();
$this->daysPassed = $query
->select(
[
'datediff(current_date, card.inactivated_at ) '
]
)
->from(Card::tableName())
->andWhere(['id_card' => $this->card->id_card])
->scalar();
$query = new Query();
$this->tickets = $query
->select(
[
'ticket.id_ticket as id_ticket',
'ticket.start as start',
'ticket.end as end',
'ticket.created_at as created_at',
'ticket.usage_count as usage_count',
'ticket.max_usage_count as max_usage_count',
'date_add( ticket.end, INTERVAL datediff(current_date, card.inactivated_at) DAY ) as end2'
]
)
->from(Ticket::tableName())
->innerJoin(Card::tableName(), 'card.id_card = ticket.id_card')
->andWhere(['ticket.id_card' => $this->card->id_card])
->andWhere(
['or',
['and',
['<=','ticket.start',$this->card->inactivated_at ],
['>=','ticket.end',$this->card->inactivated_at ]
],
['>=','ticket.start',$this->card->inactivated_at ],
]
)
->orderBy(
[
'ticket.start' => SORT_DESC
]
)
->all();
}
public function loadTicketsDataProvider()
{
$this->loadTicketsToActivate();
return new ArrayDataProvider(
[
'allModels' => $this->tickets,
'sort' => false,
'pagination' => false
]
);
}
/**
* @return bool
* @throws \Exception
*/
public function activate()
{
if (!$this->validate()) {
return false;
}
$tx = \Yii::$app->db->beginTransaction();
assert(isset($tx));
try {
Yii::$app->db->createCommand(Ticket::$SQL_UPDATE_TICKETS_END_DATE_ON_CARD_ACTIVATION
. " AND id_card = '" . $this->card->id_card . "'")->execute();
Card::updateAll(
[
'status' => Card::STATUS_ACTIVE,
],
[
'status' => Card::STATUS_INACTIVE,
'id_card' => $this->card->id_card
]
);
Card::updateFlagStatus();
$tx->commit();
} catch (\Exception $exception) {
$tx->rollBack();
throw $exception;
}
Yii::$app->session->setFlash('success', 'Kártya aktiválva');
return true;
}
}

View File

@@ -17,6 +17,17 @@ if (count($model->tickets) > 0) {
$ticket = $model->tickets[0];
}
if ( isset($model,$model->card)){
if ( $model->card->status == \common\models\Card::STATUS_INACTIVE ){
echo Html::beginTag("div", ['class' => "alert alert-danger", "role" => "alert"]);
echo Html::beginTag("strong", []);
echo "A vendég inaktív!";
echo Html::a("Aktiválás", ["customer/activate",'number' => $model->card->number ]);
echo Html::endTag("strong");
echo Html::endTag("div");
}
}
if (isset($model->card)) {
if (isset($model->customer)) {
if ($model->card->validity == 0) {

View File

@@ -0,0 +1,101 @@
<h1>Recepció</h1>
<?php
use common\models\Card;
use frontend\components\ReceptionWidget;
use yii\grid\GridView;
use yii\widgets\ActiveForm;
use yii\helpers\Html;
?>
<?php echo ReceptionWidget::widget(['form' => $model, 'route' => ['customer/reception']]) ?>
<h2>Aktiválás</h2>
<?php if ($formModel->card->status == Card::STATUS_INACTIVE) { ?>
<div class="customer-form">
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<div class="row">
<div class="col-md-3">
Inaktiválási dátum:
</div>
<div class="col-md-3">
<?= \Yii::$app->formatter->asDate($formModel->card->inactivated_at) ?>
</div>
</div>
<div class="row">
<div class="col-md-3">
Eltelt napok:
</div>
<div class="col-md-3">
<?= $formModel->daysPassed ?>
</div>
</div>
<?= GridView::widget([
'dataProvider' => $ticketsDataProvider,
'columns' => [
[
'attribute' => 'id_ticket',
'label' => 'Bérlet Azonosító'
],
[
'attribute' => 'created_at',
'label' => 'Vásárlás ideje',
'format' => 'datetime'
],
[
'attribute' => 'start',
'label' => 'Érvényesség kezdete',
'format' => 'date'
],
[
'attribute' => 'end',
'label' => 'Érvényesség vége',
'format' => 'date'
],
[
'attribute' => 'max_usage_count',
'label' => 'Max alkalmak'
],
[
'attribute' => 'usage_count',
'label' => 'Felhasznált alkalmak'
],
[
'attribute' => 'end2',
'label' => 'Új Érvényesség vége',
'format' => 'date'
],
],
]); ?>
<div class="row">
<div class="col-md-3">
<?= Html::submitButton('Aktiválás', ['class' => 'btn btn-success']) ?>
</div>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php } else { ?>
<div class="alert alert-success" role="alert">
<p>
A kártya aktív
</p>
</div>
<?php } ?>