use EasyCorp\Bundle\EasyAdminBundle\Config\Assets; | use EasyCorp\Bundle\EasyAdminBundle\Config\Assets; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | ||||
use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController ; | |||||
use Lc\SovBundle\Controller\Dashboard\DashboardAdminController as SovDashboardController ; | |||||
class DashboardAdminController extends SovDashboardController | |||||
class DashboardAdminAdminController extends SovDashboardController | |||||
{ | { | ||||
public function configureCrud(): Crud | public function configureCrud(): Crud | ||||
{ | { |
namespace Lc\CaracoleBundle\Controller\Reminder; | namespace Lc\CaracoleBundle\Controller\Reminder; | ||||
use Lc\CaracoleBundle\Controller\AdminControllerTrait; | use Lc\CaracoleBundle\Controller\AdminControllerTrait; | ||||
use Lc\SovBundle\Controller\Reminder\ReminderController as SovReminderController; | |||||
use Lc\SovBundle\Controller\Reminder\ReminderAdminController as SovReminderController; | |||||
abstract class ReminderAdminController extends SovReminderController | abstract class ReminderAdminController extends SovReminderController | ||||
{ | { |
use Lc\CaracoleBundle\Model\File\DocumentModel; | use Lc\CaracoleBundle\Model\File\DocumentModel; | ||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | ||||
use Lc\CaracoleBundle\Model\Section\SectionInterface; | use Lc\CaracoleBundle\Model\Section\SectionInterface; | ||||
use Lc\CaracoleBundle\Model\Ticket\TicketInterface; | |||||
use Lc\SovBundle\Model\Ticket\TicketInterface; | |||||
use Lc\CaracoleBundle\Model\User\VisitorInterface; | use Lc\CaracoleBundle\Model\User\VisitorInterface; | ||||
use Lc\SovBundle\Doctrine\Pattern\AbstractLightEntity; | use Lc\SovBundle\Doctrine\Pattern\AbstractLightEntity; | ||||
use Lc\SovBundle\Model\User\UserInterface; | use Lc\SovBundle\Model\User\UserInterface; | ||||
protected $updatedBy; | protected $updatedBy; | ||||
/** | /** | ||||
* @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Ticket\TicketInterface", mappedBy="orderShop") | |||||
* @ORM\OneToMany(targetEntity="Lc\SovBundle\Model\Ticket\TicketInterface", mappedBy="orderShop") | |||||
*/ | */ | ||||
protected $tickets; | protected $tickets; | ||||
<?php | |||||
namespace Lc\CaracoleBundle\Model\Ticket ; | |||||
interface TicketInterface | |||||
{ | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Model\Ticket ; | |||||
interface TicketMessageInterface | |||||
{ | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Model\Ticket; | |||||
use Doctrine\ORM\Mapping as ORM; | |||||
use Gedmo\Mapping\Annotation as Gedmo; | |||||
use Lc\SovBundle\Doctrine\Extension\StatusInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\StatusTrait; | |||||
use Lc\SovBundle\Doctrine\Pattern\AbstractLightEntity; | |||||
/** | |||||
* @ORM\MappedSuperclass() | |||||
*/ | |||||
abstract class TicketMessageModel extends AbstractLightEntity implements StatusInterface | |||||
{ | |||||
use StatusTrait; | |||||
/** | |||||
* @Gedmo\Blameable(on="create") | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\User\UserInterface") | |||||
* @ORM\JoinColumn(nullable=true) | |||||
*/ | |||||
protected $createdBy; | |||||
/** | |||||
* @Gedmo\Blameable(on="update") | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\User\UserInterface") | |||||
* @ORM\JoinColumn(nullable=true) | |||||
*/ | |||||
protected $updatedBy; | |||||
/** | |||||
* @ORM\Column(type="text") | |||||
*/ | |||||
protected $message; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Ticket\TicketInterface", inversedBy="ticketMessages") | |||||
* @ORM\JoinColumn(nullable=false) | |||||
*/ | |||||
protected $ticket; | |||||
/** | |||||
* @ORM\Column(type="boolean", nullable=true) | |||||
*/ | |||||
protected $answerByAdmin; | |||||
/** | |||||
* @ORM\Column(type="string", length=255, nullable=true) | |||||
*/ | |||||
protected $imageFilename; | |||||
public function __toString() | |||||
{ | |||||
return $this->message; | |||||
} | |||||
public function getMessage(): ?string | |||||
{ | |||||
return $this->message; | |||||
} | |||||
public function setMessage(string $message): self | |||||
{ | |||||
$this->message = $message; | |||||
return $this; | |||||
} | |||||
public function getTicket(): ?TicketInterface | |||||
{ | |||||
return $this->ticket; | |||||
} | |||||
public function setTicket(?TicketInterface $ticket): self | |||||
{ | |||||
$this->ticket = $ticket; | |||||
return $this; | |||||
} | |||||
public function getAnswerByAdmin(): ?bool | |||||
{ | |||||
return $this->answerByAdmin; | |||||
} | |||||
public function setAnswerByAdmin(?bool $answerByAdmin): self | |||||
{ | |||||
$this->answerByAdmin = $answerByAdmin; | |||||
return $this; | |||||
} | |||||
public function getImageFilename(): ?string | |||||
{ | |||||
return $this->imageFilename; | |||||
} | |||||
public function setImageFilename(?string $imageFilename): self | |||||
{ | |||||
$this->imageFilename = $imageFilename; | |||||
return $this; | |||||
} | |||||
} |
namespace Lc\CaracoleBundle\Model\Ticket; | namespace Lc\CaracoleBundle\Model\Ticket; | ||||
use Doctrine\Common\Collections\ArrayCollection; | |||||
use Doctrine\Common\Collections\Collection; | |||||
use Doctrine\ORM\Mapping as ORM; | use Doctrine\ORM\Mapping as ORM; | ||||
use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; | use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; | ||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | ||||
use Lc\CaracoleBundle\Model\Order\OrderShopInterface; | use Lc\CaracoleBundle\Model\Order\OrderShopInterface; | ||||
use Gedmo\Mapping\Annotation as Gedmo; | |||||
use Lc\SovBundle\Doctrine\Pattern\AbstractLightEntity; | |||||
use Lc\SovBundle\Model\User\UserInterface; | |||||
use Lc\SovBundle\Model\Ticket\TicketModel as SovTicketModel; | |||||
/** | /** | ||||
* @ORM\MappedSuperclass() | * @ORM\MappedSuperclass() | ||||
*/ | */ | ||||
abstract class TicketModel extends AbstractLightEntity implements FilterMerchantInterface | |||||
abstract class TicketModel extends SovTicketModel implements FilterMerchantInterface | |||||
{ | { | ||||
const TYPE_PRODUCT_UNAVAILABLE = 'product-unavailable'; | const TYPE_PRODUCT_UNAVAILABLE = 'product-unavailable'; | ||||
const TYPE_PRODUCT_ERROR = 'product-error'; | const TYPE_PRODUCT_ERROR = 'product-error'; | ||||
const TYPE_TECHNICAL_PROBLEM = 'technical-problem'; | |||||
const TYPE_GENERAL_QUESTION = 'general-question'; | |||||
const TYPE_POULTRY_BOOKING = 'poultry-booking'; | |||||
const TYPE_MESSAGE_FROM_PDL = 'message-from-pdl'; | |||||
const TICKET_STATUS_OPEN = 'open'; | |||||
const TICKET_STATUS_BEING_PROCESSED = 'being-processed'; | |||||
const TICKET_STATUS_CLOSED = 'closed'; | |||||
/** | |||||
* @Gedmo\Blameable(on="create") | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\User\UserInterface") | |||||
* @ORM\JoinColumn(nullable=true) | |||||
*/ | |||||
protected $createdBy; | |||||
/** | |||||
* @Gedmo\Blameable(on="update") | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\User\UserInterface") | |||||
* @ORM\JoinColumn(nullable=true) | |||||
*/ | |||||
protected $updatedBy; | |||||
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface") | * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface") | ||||
*/ | */ | ||||
protected $merchant; | protected $merchant; | ||||
/** | |||||
* @ORM\Column(type="string", length=32) | |||||
*/ | |||||
protected $type; | |||||
/** | |||||
* @ORM\Column(type="string", length=32) | |||||
*/ | |||||
protected $status; | |||||
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Order\OrderShopInterface", inversedBy="tickets") | * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Order\OrderShopInterface", inversedBy="tickets") | ||||
*/ | */ | ||||
protected $orderShop; | protected $orderShop; | ||||
/** | |||||
* @ORM\Column(type="string", length=255) | |||||
*/ | |||||
protected $subject; | |||||
/** | |||||
* @ORM\Column(type="array", nullable=true) | |||||
*/ | |||||
protected $tags = []; | |||||
/** | |||||
* @ORM\Column(type="string", length=64, nullable=true) | |||||
*/ | |||||
protected $visitorFirstname; | |||||
/** | |||||
* @ORM\Column(type="string", length=64, nullable=true) | |||||
*/ | |||||
protected $visitorLastname; | |||||
/** | |||||
* @ORM\Column(type="string", length=128, nullable=true) | |||||
*/ | |||||
protected $visitorEmail; | |||||
/** | |||||
* @ORM\Column(type="string", length=255, nullable=true) | |||||
*/ | |||||
protected $visitorToken; | |||||
/** | |||||
* @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Ticket\TicketMessageInterface", mappedBy="ticket", orphanRemoval=true) | |||||
* @ORM\OrderBy({"id" = "ASC"}) | |||||
*/ | |||||
protected $ticketMessages; | |||||
/** | |||||
* @ORM\ManyToOne(targetEntity="Lc\SovBundle\Model\User\UserInterface", inversedBy="tickets") | |||||
*/ | |||||
protected $user; | |||||
public function __construct() | |||||
{ | |||||
$this->ticketMessages = new ArrayCollection(); | |||||
} | |||||
public function getUsername() | |||||
{ | |||||
if ($this->getUser()) { | |||||
return $this->getUser()->getName(); | |||||
} else { | |||||
return strtoupper($this->getVisitorLastname()) . ' ' . $this->getVisitorFirstname(); | |||||
} | |||||
} | |||||
public function getVisitorInfos() | |||||
{ | |||||
return strtoupper($this->getVisitorLastname()) . ' ' . $this->getVisitorFirstname( | |||||
) . ' (' . $this->getVisitorEmail() . ')'; | |||||
} | |||||
public function getMerchant(): ?MerchantInterface | |||||
public function getMerchant(): MerchantInterface | |||||
{ | { | ||||
return $this->merchant; | return $this->merchant; | ||||
} | } | ||||
public function setMerchant(?MerchantInterface $merchant): self | |||||
public function setMerchant(MerchantInterface $merchant): self | |||||
{ | { | ||||
$this->merchant = $merchant; | $this->merchant = $merchant; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getType(): ?string | |||||
{ | |||||
return $this->type; | |||||
} | |||||
public function setType(string $type): self | |||||
{ | |||||
$this->type = $type; | |||||
return $this; | |||||
} | |||||
public function getTypeLabel(): string | |||||
{ | |||||
return 'field.Ticket.typeOptions.' . $this->getType(); | |||||
} | |||||
public function getStatus(): ?string | |||||
{ | |||||
return $this->status; | |||||
} | |||||
public function setStatus(string $status): self | |||||
{ | |||||
$this->status = $status; | |||||
return $this; | |||||
} | |||||
public function getStatusLabel(): string | |||||
{ | |||||
return 'field.Ticket.statusOptions.' . $this->getStatus(); | |||||
} | |||||
public function getOrderShop(): ?OrderShopInterface | |||||
public function getOrderShop(): OrderShopInterface | |||||
{ | { | ||||
return $this->orderShop; | return $this->orderShop; | ||||
} | } | ||||
public function setOrderShop(?OrderShopInterface $orderShop): self | |||||
public function setOrderShop(OrderShopInterface $orderShop): self | |||||
{ | { | ||||
$this->orderShop = $orderShop; | $this->orderShop = $orderShop; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getSubject(): ?string | |||||
{ | |||||
return $this->subject; | |||||
} | |||||
public function setSubject(string $subject): self | |||||
{ | |||||
$this->subject = $subject; | |||||
return $this; | |||||
} | |||||
public function getTags(): ?array | |||||
{ | |||||
return $this->tags; | |||||
} | |||||
public function setTags(?array $tags): self | |||||
{ | |||||
$this->tags = $tags; | |||||
return $this; | |||||
} | |||||
public function getVisitorFirstname(): ?string | |||||
{ | |||||
return $this->visitorFirstname; | |||||
} | |||||
public function setVisitorFirstname(?string $visitorFirstname): self | |||||
{ | |||||
$this->visitorFirstname = $visitorFirstname; | |||||
return $this; | |||||
} | |||||
public function getVisitorLastname(): ?string | |||||
{ | |||||
return $this->visitorLastname; | |||||
} | |||||
public function setVisitorLastname(?string $visitorLastname): self | |||||
{ | |||||
$this->visitorLastname = $visitorLastname; | |||||
return $this; | |||||
} | |||||
public function getVisitorEmail(): ?string | |||||
{ | |||||
return $this->visitorEmail; | |||||
} | |||||
public function setVisitorEmail(?string $visitorEmail): self | |||||
{ | |||||
$this->visitorEmail = $visitorEmail; | |||||
return $this; | |||||
} | |||||
public function getVisitorToken(): ?string | |||||
{ | |||||
return $this->visitorToken; | |||||
} | |||||
public function setVisitorToken(?string $visitorToken): self | |||||
{ | |||||
$this->visitorToken = $visitorToken; | |||||
return $this; | |||||
} | |||||
/** | |||||
* @return Collection|TicketMessageInterface[] | |||||
*/ | |||||
public function getTicketMessages(): Collection | |||||
{ | |||||
return $this->ticketMessages; | |||||
} | |||||
public function addTicketMessage(TicketMessageInterface $ticketMessage): self | |||||
{ | |||||
if (!$this->ticketMessages->contains($ticketMessage)) { | |||||
$this->ticketMessages[] = $ticketMessage; | |||||
$ticketMessage->setTicket($this); | |||||
} | |||||
return $this; | |||||
} | |||||
public function removeTicketMessage(TicketMessageInterface $ticketMessage): self | |||||
{ | |||||
if ($this->ticketMessages->contains($ticketMessage)) { | |||||
$this->ticketMessages->removeElement($ticketMessage); | |||||
// set the owning side to null (unless already changed) | |||||
if ($ticketMessage->getTicket() === $this) { | |||||
$ticketMessage->setTicket(null); | |||||
} | |||||
} | |||||
return $this; | |||||
} | |||||
public function getUser(): ?UserInterface | |||||
{ | |||||
return $this->user; | |||||
} | |||||
public function setUser(?UserInterface $user): self | |||||
{ | |||||
$this->user = $user; | |||||
return $this; | |||||
} | |||||
} | } |
*/ | */ | ||||
abstract class GroupUserModel extends SovGroupUserModel implements FilterMerchantInterface | abstract class GroupUserModel extends SovGroupUserModel implements FilterMerchantInterface | ||||
{ | { | ||||
/** | /** | ||||
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface", inversedBy="groupUsers") | * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface", inversedBy="groupUsers") | ||||
* @ORM\JoinColumn(nullable=false) | * @ORM\JoinColumn(nullable=false) |
use Lc\CaracoleBundle\Model\Reduction\ReductionCreditInterface; | use Lc\CaracoleBundle\Model\Reduction\ReductionCreditInterface; | ||||
use Lc\SovBundle\Model\User\User as SovUserModel; | use Lc\SovBundle\Model\User\User as SovUserModel; | ||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | ||||
use Lc\CaracoleBundle\Model\Ticket\TicketInterface; | |||||
use Lc\SovBundle\Model\User\UserInterface; | |||||
use Lc\SovBundle\Model\Ticket\TicketInterface; | |||||
/** | /** | ||||
* @ORM\MappedSuperclass() | * @ORM\MappedSuperclass() | ||||
protected $userMerchants; | protected $userMerchants; | ||||
/** | /** | ||||
* @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Ticket\TicketInterface", mappedBy="user") | |||||
* @ORM\OneToMany(targetEntity="Lc\SovBundle\Model\Ticket\TicketInterface", mappedBy="user") | |||||
*/ | */ | ||||
protected $tickets; | protected $tickets; | ||||
<?php | |||||
namespace Lc\CaracoleBundle\Repository\Ticket; | |||||
use Lc\CaracoleBundle\Model\Ticket\TicketMessageInterface; | |||||
use Lc\SovBundle\Repository\AbstractRepository; | |||||
/** | |||||
* @method TicketMessageInterface|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method TicketMessageInterface|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method TicketMessageInterface[] findAll() | |||||
* @method TicketMessageInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class TicketMessageRepository extends AbstractRepository | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return TicketMessageInterface::class; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Repository\Ticket; | |||||
use Lc\CaracoleBundle\Model\Ticket\TicketInterface; | |||||
use Lc\SovBundle\Repository\AbstractRepository; | |||||
/** | |||||
* @method TicketInterface|null find($id, $lockMode = null, $lockVersion = null) | |||||
* @method TicketInterface|null findOneBy(array $criteria, array $orderBy = null) | |||||
* @method TicketInterface[] findAll() | |||||
* @method TicketInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||||
*/ | |||||
class TicketRepository extends AbstractRepository | |||||
{ | |||||
public function getInterfaceClass() | |||||
{ | |||||
return TicketInterface::class; | |||||
} | |||||
} |