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

View File

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

View File

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