TicketType Serializer update

Missing default badge type

Change-Id: I1b8f965bbb4309421b0d311968618a5b1565d491
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2021-07-16 10:16:36 -03:00
parent 0409f6fd0f
commit 01054ca759
3 changed files with 21 additions and 27 deletions

View File

@ -33,7 +33,12 @@ class SummitAdministratorPermissionGroup extends SilverstripeBaseModel
*/
private $title;
const ValidGroups = [IGroup::SummitAdministrators, IGroup::TrackChairsAdmins];
const ValidGroups = [
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
IGroup::TrackChairs,
IGroup::BadgePrinters,
];
public function __construct()
{
@ -79,11 +84,10 @@ class SummitAdministratorPermissionGroup extends SilverstripeBaseModel
}
public function canAddMember(Member $member):bool{
return
$member->isOnGroup(IGroup::SummitAdministrators, true) ||
$member->isOnGroup(IGroup::TrackChairs, true) ||
$member->isOnGroup(IGroup::TrackChairsAdmins, true) ||
$member->isOnGroup(IGroup::BadgePrinters, true);
foreach (self::ValidGroups as $slug){
if($member->isOnGroup($slug, true)) return true;
}
return false;
}
/**

View File

@ -446,8 +446,9 @@ class SummitTicketType extends SilverstripeBaseModel
* @return int
*/
public function getBadgeTypeId(){
$res = $this->getBadgeType();
try {
return is_null($this->badge_type) ? 0: $this->badge_type->getId();
return is_null($res) ? 0: $res->getId();
}
catch(\Exception $ex){
return 0;
@ -459,20 +460,19 @@ class SummitTicketType extends SilverstripeBaseModel
*/
public function getBadgeType(): ?SummitBadgeType
{
return $this->badge_type;
$res = $this->badge_type;
if(is_null($res)){
$res = $this->summit->getDefaultBadgeType();
}
return $res;
}
/**
* @return bool
*/
public function hasBadgeType(){
public function hasBadgeType():bool{
return $this->getBadgeTypeId() > 0;
}
public function clearBadgeType(){
$this->badge_type = null;
}
/**
* @param SummitBadgeType $badge_type
*/

View File

@ -19,7 +19,6 @@ use Illuminate\Support\Facades\Event;
use libs\utils\ITransactionService;
use models\exceptions\EntityNotFoundException;
use models\exceptions\ValidationException;
use models\summit\ISummitTicketTypeRepository;
use models\summit\Summit;
use models\summit\SummitTicketType;
use services\apis\IEventbriteAPI;
@ -32,11 +31,6 @@ final class SummitTicketTypeService
implements ISummitTicketTypeService
{
/**
* @var ISummitTicketTypeRepository
*/
private $repository;
/**
* @var IEventbriteAPI
*/
@ -44,30 +38,26 @@ final class SummitTicketTypeService
/**
* SummitTicketTypeService constructor.
* @param ISummitTicketTypeRepository $repository
* @param IEventbriteAPI $eventbrite_api
* @param ITransactionService $tx_service
*/
public function __construct
(
ISummitTicketTypeRepository $repository,
IEventbriteAPI $eventbrite_api,
ITransactionService $tx_service
)
{
parent::__construct($tx_service);
$this->repository = $repository;
$this->eventbrite_api = $eventbrite_api;
}
/**
* @param Summit $summit
* @param array $data
* @return array
* @throws EntityNotFoundException
*/
static private function getPromoCodeParams(Summit $summit, array $data):array{
static private function getTicketTypeParams(Summit $summit, array $data):array{
if(isset($data['badge_type_id'])){
$badge_type = $summit->getBadgeTypeById(intval($data['badge_type_id']));
if(is_null($badge_type))
@ -120,7 +110,7 @@ final class SummitTicketTypeService
}
}
$ticket_type = SummitTicketTypeFactory::build($summit, self::getPromoCodeParams($summit, $data));
$ticket_type = SummitTicketTypeFactory::build($summit, self::getTicketTypeParams($summit, $data));
if($summit->hasTicketTypes()){
// before add check if we have the same currency
@ -215,7 +205,7 @@ final class SummitTicketTypeService
if(!empty($currency) && !empty($summit_currency) && $summit_currency != $currency)
throw new ValidationException(sprintf("ticket type should have same currency as summit (%s)", $summit_currency));
$ticket_type = SummitTicketTypeFactory::populate($ticket_type, self::getPromoCodeParams($summit, $data));
$ticket_type = SummitTicketTypeFactory::populate($ticket_type, self::getTicketTypeParams($summit, $data));
Event::fire
(