<?php
namespace App\Entity\Slave;
use App\Twig\Extension\AppExtension;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="eposm_s_ticket")
* @ORM\Entity(repositoryClass="App\Repository\Slave\TicketRepository")
*/
class Ticket
{
public function canDelete($type){
switch($type){
case 'all':
if(sizeof($this->getSuspensions()) > 0) return false;
if(sizeof($this->getInterventions()) > 0) return false;
break;
case 'activities':
foreach($this->getInterventions() as $intervention){
if($intervention->getOutcomeType()->getSlug() == 'comleted')
return false;
}
break;
}
return true;
}
public function canMakeActionByStatus($statusesSlug){
$array = array();
if(str_contains($statusesSlug, ','))
$array = explode(',', $statusesSlug);
else
array_push($array, $statusesSlug);
if(in_array($this->getStatus()->getSlug(), $array))
return true;
return false;
}
public function displayStatus($type)
{
if($this->isSystemError()){
$color = 'color_r';
$title = 'Con errori';
}
else{
switch($this->getStatus()->getSlug()){
case 'to_assign': $color = 'color_lb'; break;
case 'assigned': $color = 'color_am'; break;
case 'taken_charge': $color = 'color_gr'; break;
case 'suspension_request': $color = 'color_am'; break;
case 'suspended': $color = 'color_r'; break;
case 'closed': $color = 'color_gr'; break;
case 'closed_portal': $color = 'color_gr_dark'; break;
case 'canceled': $color = 'color_r'; break;
case 'wrong': $color = 'color_r'; break;
case 'temp': $color = 'color_r'; break;
default: break;
}
$title = $this->getStatus()->getValue();
}
switch($type){
case 'icon': return '<i class="icon-circle cursor_p '.$color.'" data-bs-toggle="tooltip" title="'.$title.'"></i>'; break;
case 'string': return '<i class="icon-circle cursor_p '.$color.'"></i> '.$title; break;
}
}
public function displayJsonReport()
{
$html = '';
if($this->jsonReport != '[]'){
$matrix = json_decode($this->jsonReport, true);
foreach($matrix as $array)
foreach($array as $a)
$html.= '<tr><th>'.array_keys($array)[0].'</th><td colspan="2">'.$a.'</td></tr>';
}
return $html;
}
public function displayTableJson()
{
$html = '';
$first = true;
$matrix = json_decode($this->json, true);
$html.= '<table class="table table_no_padding m_b_none b_none font_12">';
foreach($matrix as $array)
foreach($array as $a)
$html.= '<tr><th>'.array_keys($array)[0].'</th><td>'.$a.'</td></tr>';
$html.= '</table>';
return $html;
}
public function displayJsonValueByColumn($column){
$matrix = json_decode($this->json, true);
foreach($matrix as $array)
foreach($array as $a)
if(strtolower(array_keys($array)[0]) == strtolower($column))
return $a;
return '';
}
public function displayJsonReportValueByColumn($column){
$matrix = json_decode($this->jsonReport, true);
foreach($matrix as $array)
foreach($array as $a)
if(strtolower(array_keys($array)[0]) == strtolower($column))
return $a;
return '';
}
public function displayNumberAndOperation()
{
return 'Numero: '.$this->getNumber().' --- Cliente: '.$this->getClient().' --- Operazione: '.$this->getOperation()->getValue();
}
public function getActualSuspension()
{
$now = new \Datetime();
foreach($this->getSuspensions() as $suspension){
if($suspension->getDatetimeFrom()->format('YmdHis') <= $now->format('YmdHis') && !$suspension->isUnlocked()){
return $suspension;
}
}
return null;
}
public function getLastSuspension()
{
$returnSus = null;
$array = array();
foreach($this->getSuspensions() as $suspension){
if($suspension->isManaged() && $suspension->isApproved()){
// SE LA DATA E' INDETERMINATA E' PER FORZA L'ULTIMA SOSPENSIONE, ALTRIMENTI AVREBBE UNA DATA DI SCADENZA
if($suspension->getDatetimeTo() == null)
return $suspension;
array_push($array, $suspension);
}
}
$first = true;
foreach($array as $sus){
if($first || $returnSus->getDatetimeTo()->format('YmdHis') <= $sus->getDatetimeTo()->format('YmdHis')){
$returnSus = $sus;
$first = false;
}
}
return $returnSus;
}
public function getInterventionCompleted()
{
foreach($this->getInterventions() as $intervention){
if($intervention->getOutcomeType()->getSlug() == 'completed'){
return $intervention;
}
}
return null;
}
public function getOpenSuspension()
{
foreach($this->getSuspensions() as $sus){
if($sus->getDatetimeTo() == null && $sus->getRefuseMotivation() == 'Sospeso dal fornitore')
return $sus;
}
}
/**
* @ORM\Column(name="id", type="bigint")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="number", type="string", length=191, nullable=true)
*/
protected $number;
/**
* @ORM\Column(name="datetime_import", type="datetime", nullable=true)
*/
protected $datetimeImport;
/**
* @ORM\Column(name="datetime_start", type="datetime", nullable=true)
*/
protected $datetimeStart;
/**
* @ORM\Column(name="datetime_expiration", type="datetime", nullable=true)
*/
protected $datetimeExpiration;
/**
* @ORM\Column(name="datetime_end", type="datetime", nullable=true)
*/
protected $datetimeEnd;
/**
* @ORM\Column(name="address", type="string", length=191, nullable=true)
*/
protected $address;
/**
* @ORM\Column(name="locality", type="string", length=191, nullable=true)
*/
protected $locality;
/**
* @ORM\Column(name="zip", type="string", length=191, nullable=true)
*/
protected $zip;
/**
* @ORM\Column(name="id_city", type="bigint", nullable=true)
*/
protected $idCity;
/**
* @ORM\Column(name="id_province", type="bigint", nullable=true)
*/
protected $idProvince;
/**
* @ORM\Column(name="other_city", type="string", length=191, nullable=true)
*/
protected $otherCity;
/**
* @ORM\Column(name="system_error", type="boolean")
*/
protected $systemError = false;
/**
* @ORM\Column(name="system_error_slug", type="string", length=191, nullable=true)
*/
protected $systemErrorSlug;
/**
* @ORM\Column(name="system_error_details", type="text", nullable=true)
*/
protected $systemErrorDetails;
/**
* @ORM\Column(name="json", type="text", nullable=true)
*/
protected $json;
/**
* @ORM\Column(name="directory_path", type="string", length=191)
*/
protected $directoryPath;
/**
* @ORM\Column(name="waybill", type="string", length=191, nullable=true)
*/
protected $waybill;
/**
* @ORM\Column(name="json_report", type="text", nullable=true)
*/
protected $jsonReport = '[]';
/**
* @ORM\Column(name="billable", type="boolean")
*/
protected $billable = true;
/**
* @ORM\Column(name="closed_on_portal", type="boolean")
*/
protected $closedOnPortal = false;
// ManyToOne
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\Supplier", inversedBy="tickets")
* @ORM\JoinColumn(name="supplier_id", referencedColumnName="id")
*/
private $supplier;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\Client", inversedBy="tickets")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
private $client;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\Operation", inversedBy="tickets")
* @ORM\JoinColumn(name="operation_id", referencedColumnName="id")
*/
private $operation;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\User", inversedBy="tickets")
* @ORM\JoinColumn(name="technician_id", referencedColumnName="id")
*/
private $technician;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\TicketStatus", inversedBy="tickets")
* @ORM\JoinColumn(name="status_id", referencedColumnName="id")
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\Termid", inversedBy="tickets")
* @ORM\JoinColumn(name="termid_id", referencedColumnName="id")
*/
private $termid;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\OperationTariffAmount", inversedBy="tickets")
* @ORM\JoinColumn(name="operation_tariff_amount_id", referencedColumnName="id")
*/
private $operationTariffAmount;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Slave\OperationTariffAmount", inversedBy="uavTickets")
* @ORM\JoinColumn(name="uav_operation_tariff_amount_id", referencedColumnName="id")
*/
private $uavOperationTariffAmount;
//
// OneToMany
/**
* @ORM\OneToMany(targetEntity="App\Entity\Slave\TicketSuspension", mappedBy="ticket")
*/
private $suspensions;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Slave\Intervention", mappedBy="ticket")
*/
private $interventions;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Slave\TicketReminder", mappedBy="ticket")
*/
private $reminders;
public function __construct()
{
$this->suspensions = new ArrayCollection();
$this->interventions = new ArrayCollection();
$this->reminders = new ArrayCollection();
}
//
public function getId(): ?string
{
return $this->id;
}
public function getNumber(): ?string
{
return $this->number;
}
public function setNumber(?string $number): static
{
$this->number = $number;
return $this;
}
public function getDatetimeImport(): ?\DateTimeInterface
{
return $this->datetimeImport;
}
public function setDatetimeImport(?\DateTimeInterface $datetimeImport): static
{
$this->datetimeImport = $datetimeImport;
return $this;
}
public function getDatetimeStart(): ?\DateTimeInterface
{
return $this->datetimeStart;
}
public function setDatetimeStart(?\DateTimeInterface $datetimeStart): static
{
$this->datetimeStart = $datetimeStart;
return $this;
}
public function getDatetimeExpiration(): ?\DateTimeInterface
{
return $this->datetimeExpiration;
}
public function setDatetimeExpiration(?\DateTimeInterface $datetimeExpiration): static
{
$this->datetimeExpiration = $datetimeExpiration;
return $this;
}
public function getDatetimeEnd(): ?\DateTimeInterface
{
return $this->datetimeEnd;
}
public function setDatetimeEnd(?\DateTimeInterface $datetimeEnd): static
{
$this->datetimeEnd = $datetimeEnd;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(?string $address): static
{
$this->address = $address;
return $this;
}
public function getLocality(): ?string
{
return $this->locality;
}
public function setLocality(?string $locality): static
{
$this->locality = $locality;
return $this;
}
public function getZip(): ?string
{
return $this->zip;
}
public function setZip(?string $zip): static
{
$this->zip = $zip;
return $this;
}
public function getIdCity(): ?string
{
return $this->idCity;
}
public function setIdCity(?string $idCity): static
{
$this->idCity = $idCity;
return $this;
}
public function getIdProvince(): ?string
{
return $this->idProvince;
}
public function setIdProvince(?string $idProvince): static
{
$this->idProvince = $idProvince;
return $this;
}
public function getOtherCity(): ?string
{
return $this->otherCity;
}
public function setOtherCity(?string $otherCity): static
{
$this->otherCity = $otherCity;
return $this;
}
public function isSystemError(): ?bool
{
return $this->systemError;
}
public function setSystemError(bool $systemError): static
{
$this->systemError = $systemError;
return $this;
}
public function getSystemErrorSlug(): ?string
{
return $this->systemErrorSlug;
}
public function setSystemErrorSlug(?string $systemErrorSlug): static
{
$this->systemErrorSlug = $systemErrorSlug;
return $this;
}
public function getSystemErrorDetails(): ?string
{
return $this->systemErrorDetails;
}
public function setSystemErrorDetails(?string $systemErrorDetails): static
{
$this->systemErrorDetails = $systemErrorDetails;
return $this;
}
public function getJson(): ?string
{
return $this->json;
}
public function setJson(?string $json): static
{
$this->json = $json;
return $this;
}
public function getDirectoryPath(): ?string
{
return $this->directoryPath;
}
public function setDirectoryPath(string $directoryPath): static
{
$this->directoryPath = $directoryPath;
return $this;
}
public function getJsonReport(): ?string
{
return $this->jsonReport;
}
public function setJsonReport(?string $jsonReport): static
{
$this->jsonReport = $jsonReport;
return $this;
}
public function isBillable(): ?bool
{
return $this->billable;
}
public function setBillable(bool $billable): static
{
$this->billable = $billable;
return $this;
}
public function isClosedOnPortal(): ?bool
{
return $this->closedOnPortal;
}
public function setClosedOnPortal(bool $closedOnPortal): static
{
$this->closedOnPortal = $closedOnPortal;
return $this;
}
public function getSupplier(): ?Supplier
{
return $this->supplier;
}
public function setSupplier(?Supplier $supplier): static
{
$this->supplier = $supplier;
return $this;
}
public function getClient(): ?Client
{
return $this->client;
}
public function setClient(?Client $client): static
{
$this->client = $client;
return $this;
}
public function getOperation(): ?Operation
{
return $this->operation;
}
public function setOperation(?Operation $operation): static
{
$this->operation = $operation;
return $this;
}
public function getTechnician(): ?User
{
return $this->technician;
}
public function setTechnician(?User $technician): static
{
$this->technician = $technician;
return $this;
}
public function getStatus(): ?TicketStatus
{
return $this->status;
}
public function setStatus(?TicketStatus $status): static
{
$this->status = $status;
return $this;
}
public function getTermid(): ?Termid
{
return $this->termid;
}
public function setTermid(?Termid $termid): static
{
$this->termid = $termid;
return $this;
}
public function getOperationTariffAmount(): ?OperationTariffAmount
{
return $this->operationTariffAmount;
}
public function setOperationTariffAmount(?OperationTariffAmount $operationTariffAmount): static
{
$this->operationTariffAmount = $operationTariffAmount;
return $this;
}
public function getUavOperationTariffAmount(): ?OperationTariffAmount
{
return $this->uavOperationTariffAmount;
}
public function setUavOperationTariffAmount(?OperationTariffAmount $uavOperationTariffAmount): static
{
$this->uavOperationTariffAmount = $uavOperationTariffAmount;
return $this;
}
/**
* @return Collection<int, TicketSuspension>
*/
public function getSuspensions(): Collection
{
return $this->suspensions;
}
public function addSuspension(TicketSuspension $suspension): static
{
if (!$this->suspensions->contains($suspension)) {
$this->suspensions->add($suspension);
$suspension->setTicket($this);
}
return $this;
}
public function removeSuspension(TicketSuspension $suspension): static
{
if ($this->suspensions->removeElement($suspension)) {
// set the owning side to null (unless already changed)
if ($suspension->getTicket() === $this) {
$suspension->setTicket(null);
}
}
return $this;
}
/**
* @return Collection<int, Intervention>
*/
public function getInterventions(): Collection
{
return $this->interventions;
}
public function addIntervention(Intervention $intervention): static
{
if (!$this->interventions->contains($intervention)) {
$this->interventions->add($intervention);
$intervention->setTicket($this);
}
return $this;
}
public function removeIntervention(Intervention $intervention): static
{
if ($this->interventions->removeElement($intervention)) {
// set the owning side to null (unless already changed)
if ($intervention->getTicket() === $this) {
$intervention->setTicket(null);
}
}
return $this;
}
/**
* @return Collection<int, TicketReminder>
*/
public function getReminders(): Collection
{
return $this->reminders;
}
public function addReminder(TicketReminder $reminder): static
{
if (!$this->reminders->contains($reminder)) {
$this->reminders->add($reminder);
$reminder->setTicket($this);
}
return $this;
}
public function removeReminder(TicketReminder $reminder): static
{
if ($this->reminders->removeElement($reminder)) {
// set the owning side to null (unless already changed)
if ($reminder->getTicket() === $this) {
$reminder->setTicket(null);
}
}
return $this;
}
public function getWaybill(): ?string
{
return $this->waybill;
}
public function setWaybill(?string $waybill): static
{
$this->waybill = $waybill;
return $this;
}
}