fitness-web/rest/controllers/CustomerController.php
2018-08-31 07:50:14 +02:00

99 lines
2.6 KiB
PHP

<?php
/**
* Created by IntelliJ IDEA.
* User: rocho
* Date: 2018.08.29.
* Time: 21:58
*/
namespace rest\controllers;
use common\components\Helper;
use common\models\Card;
use common\models\Ticket;
use yii\web\BadRequestHttpException;
use yii\web\NotFoundHttpException;
class CustomerController extends RestController
{
/**
* @param $number
* @param int $lastXDays default 0. Search for valid tickets also in the last x days.
* @return array
* @throws \Exception
*/
public function actionDiscountStatus($number , $lastXDays = 0 ){
$number = Helper::fixAsciiChars( $number );
$query = Card::find();
$query->andWhere(['or',
['and',[ 'in','card.number' , [$number]],"trim(coalesce(card.number, '')) <>'' " ],
['and', ['in','card.rfid_key' ,[ $number] ],"trim(coalesce(card.rfid_key, '')) <>'' "],
]);
$card = $query->one();
if ( !isset($card)){
throw new NotFoundHttpException("Kártya nem található");
}
$customer = $card->customer;
if ( !isset($customer) ){
throw new NotFoundHttpException("Vendég nem található");
}
if ( isset($lastXDays) ){
if (!is_numeric($lastXDays)){
throw new BadRequestHttpException("lastXDays paraméter hibás");
}
if ( $lastXDays > 6 || $lastXDays < 1){
throw new BadRequestHttpException("lastXDays paraméter érték hibás");
}
}
// check if has valid ticket today
/** @var \common\models\Card $card */
$tickets = Ticket::readActive($card );
$hasValidTicket = count($tickets) > 0;
// try to find any valid ticket in the lastXDays
$minusDay = 1;
while ( !$hasValidTicket && $minusDay <= $lastXDays ){
/** @var integer $minusDay */
$day = $this->getDateMinusDays($minusDay);
$tickets = Ticket::readActive($card, $day );
$hasValidTicket = count($tickets) > 0;
$minusDay = $minusDay + 1;
}
$result = [
'discount' => $hasValidTicket
];
if ( isset($customer) ){
$result['card_number'] = $card->number;
$result['name'] = $customer->name;
}
return $result;
}
/**
* @param $minusDays
* @return \DateTime
* @throws \Exception
*/
private function getDateMinusDays($minusDays){
$date = new \DateTime('now');
$date->sub(new \DateInterval('P'.$minusDays.'D'));
$date->setTime(0,0,0);
return $date;
}
}