<?php
namespace App\AtechNet\CoreBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\OrderBy;
use Doctrine\ORM\Mapping\Table as Table;
/**
* Claim
*
* @Table(name="claims")
* @Entity(repositoryClass="App\AtechNet\CoreBundle\Repository\ClaimRepository")
* @HasLifecycleCallbacks
*/
class Claim extends AbstractSignedEntity
{
public const TYPE_CLAIM = 1;
public const TYPE_WITHDRAWAL = 2;
public const TYPE_CLAIM_REMOTE = 3;
public const TYPE_COMMISSION = 4;
public const TYPE_UNCLAIMED_PACKAGE = 5;
public const STATUS_WAITING = 50;
public const RECEIVE_TYPE_NOT_SELECTED = 0;
public const RECEIVE_TYPE_CHANGE_ON_RECEIVE = 1;
public const RECEIVE_TYPE_SHIPPED_BY_PARCEL = 2;
public const RECEIVE_TYPE_PERSONALLY = 3;
public const RETURN_TYPE_NOT_SELECTED = 0;
public const RETURN_TYPE_PARCEL = 1;
public const RETURN_TYPE_PERSONALLY = 2;
public const SOLUTION_NOT_SET = 0;
public const SOLUTION_REPAIR = 1;
public const SOLUTION_CHANGE = 2;
public const SOLUTION_ITEM_CREDIT_NOTE = 3;
public const SOLUTION_RECIEVED_IN_STOCK = 6;
public const SOLUTION_REJECTED = 4;
public const SOLUTION_CANCELED = 5;
public const SOLUTION_CAUSE_NOT_SET = 0;
public const SOLUTION_CAUSE_UNKNOWN = 1;
public const SOLUTION_CAUSE_CUSTOMER_DEMAND = 2;
public const SOLUTION_CAUSE_ERROR_NOT_OCCUR = 3;
public const SOLUTION_CAUSE_REPLACEMENT = 4;
public const SOLUTION_CAUSE_REAL_ERROR = 5;
public const PRODUCT_TYPE_NOT_SET = 0;
public const PRODUCT_TYPE_COMPONENT = 1;
public const PRODUCT_TYPE_MONITOR = 2;
public const PRODUCT_TYPE_NOTEBOOK = 3;
public const PRODUCT_TYPE_PC = 4;
public const PRODUCT_TYPE_PRINTER = 5;
public const WITHDRAWAL_REASON_NOT_SELECTED = 0;
public const WITHDRAWAL_REASON_WANT_CHANGE = 1;
public const WITHDRAWAL_REASON_MALFUNCTIONING_PRODUCT = 2;
public const WITHDRAWAL_REASON_DO_NOT_LIKE_AESTHETICS = 3;
public const WITHDRAWAL_REASON_DO_NOT_NEED = 4;
public const WITHDRAWAL_REASON_ITEM_DOESNT_TURN_ON = 5;
public const WITHDRAWAL_REASON_CHARGING_POWER_PORT_CONNECTOR_ISSUE = 6;
public const WITHDRAWAL_REASON_BATTERY_LIFE_SHORTER_THAN_EXPECTED = 7;
public const WITHDRAWAL_REASON_DEVICE_GETS_HOT = 8;
public const WITHDRAWAL_REASON_OTHER_PARTS_ARENT_AS_EXPECTED = 9;
public const WITHDRAWAL_REASON_CANT_UPDATE_DEVICE = 10;
public const WITHDRAWAL_REASON_DELIVERY_ISSUES = 11;
public const WITHDRAWAL_REASON_KEYS_MISSING_BROKEN_OTHER = 12;
public const WITHDRAWAL_REASON_PERFORMANCE_ISNT_AS_EXPECTED_GRADE = 13;
public const WITHDRAWAL_REASON_SOUND_QUALITY_ISNT_AS_EXPECTED = 14;
public const WITHDRAWAL_REASON_CPU_PROBLEM = 15;
public const WITHDRAWAL_REASON_LCD_PROBLEM = 16;
public const WITHDRAWAL_REASON_ARRIVED_DIRTY = 17;
public const WITHDRAWAL_REASON_OTHER = 18;
public const WITHDRAWAL_REASON_WRONG_MODEL = 19;
public const WITHDRAWAL_REASON_CANT_LOGIN = 20;
public const WITHDRAWAL_REASON_BITLOCKER = 21;
public const WITHDRAWAL_REASON_NO_SKIN_COLOR = 22;
public const WITHDRAWAL_REASON_WRONG_STORAGE_CPU = 23;
/**
* @return array
*/
public static function getTypeChoices(): array
{
return [
self::TYPE_CLAIM => 'Claim',
self::TYPE_WITHDRAWAL => 'Withdrawal',
self::TYPE_CLAIM_REMOTE => 'Claim remotely',
self::TYPE_COMMISSION => 'Commission',
self::TYPE_UNCLAIMED_PACKAGE => 'Unclaimed package',
];
}
/**
* @return array
*/
public static function getReceiveTypeChoices(): array
{
return [
self::RECEIVE_TYPE_NOT_SELECTED => 'Not selected',
self::RECEIVE_TYPE_CHANGE_ON_RECEIVE => 'Change on receive',
self::RECEIVE_TYPE_SHIPPED_BY_PARCEL => 'Shipped by parcel',
self::RECEIVE_TYPE_PERSONALLY => 'Personally',
];
}
/**
* @return array
*/
public static function getReturnTypeChoices(): array
{
return [
self::RETURN_TYPE_NOT_SELECTED => 'Not selected',
self::RETURN_TYPE_PARCEL => 'Parcel',
self::RETURN_TYPE_PERSONALLY => 'Personally',
];
}
/**
* @return array
*/
public static function getSolutionChoices(): array
{
return [
self::SOLUTION_NOT_SET => 'Not selected',
self::SOLUTION_REPAIR => 'Repair',
self::SOLUTION_CHANGE => 'Change',
self::SOLUTION_ITEM_CREDIT_NOTE => 'Credit note',
self::SOLUTION_RECIEVED_IN_STOCK => 'Received in stock',
self::SOLUTION_REJECTED => 'Rejected',
self::SOLUTION_CANCELED => 'Canceled',
];
}
/**
* @return array
*/
public static function getSolutionCauseChoices(): array
{
return [
self::SOLUTION_CAUSE_NOT_SET => 'Not selected',
self::SOLUTION_CAUSE_UNKNOWN => 'Do not known why',
self::SOLUTION_CAUSE_CUSTOMER_DEMAND => 'Does not meet customer demands',
self::SOLUTION_CAUSE_ERROR_NOT_OCCUR => 'The error does not occur with us',
self::SOLUTION_CAUSE_REPLACEMENT => 'Replacement',
self::SOLUTION_CAUSE_REAL_ERROR => 'Real error',
];
}
/**
* @return array
*/
public static function getProductTypeChoices(): array
{
return [
self::PRODUCT_TYPE_NOT_SET => 'Not selected',
self::PRODUCT_TYPE_COMPONENT => 'Component',
self::PRODUCT_TYPE_MONITOR => 'Monitor',
self::PRODUCT_TYPE_NOTEBOOK => 'Notebook',
self::PRODUCT_TYPE_PC => 'PC',
self::PRODUCT_TYPE_PRINTER => 'Printer',
];
}
/**
* @return array
*/
public static function getWithdrawalReasonChoices(): array
{
return [
self::WITHDRAWAL_REASON_WANT_CHANGE => 'I changed my mind about the item',
self::WITHDRAWAL_REASON_MALFUNCTIONING_PRODUCT => 'Defective, malfunctioning product',
self::WITHDRAWAL_REASON_DO_NOT_LIKE_AESTHETICS => 'I don\'t like the aesthetics of the product',
self::WITHDRAWAL_REASON_DO_NOT_NEED => 'I don\'t need the product',
self::WITHDRAWAL_REASON_ITEM_DOESNT_TURN_ON => 'Item doesn\'t turn on',
self::WITHDRAWAL_REASON_CHARGING_POWER_PORT_CONNECTOR_ISSUE => 'Charging/power port/connector issue',
self::WITHDRAWAL_REASON_BATTERY_LIFE_SHORTER_THAN_EXPECTED => 'Battery life is shorter than expected/ issue',
self::WITHDRAWAL_REASON_DEVICE_GETS_HOT => 'Device gets hot',
self::WITHDRAWAL_REASON_OTHER_PARTS_ARENT_AS_EXPECTED => 'Other parts of the item aren\'t as expected',
self::WITHDRAWAL_REASON_CANT_UPDATE_DEVICE => 'Can\'t update device',
self::WITHDRAWAL_REASON_DELIVERY_ISSUES => 'Delivery issues',
self::WITHDRAWAL_REASON_KEYS_MISSING_BROKEN_OTHER => 'Key(s) is missing/broken/backlight/button/switch not working',
self::WITHDRAWAL_REASON_PERFORMANCE_ISNT_AS_EXPECTED_GRADE => 'Performance isn\'t as expected/grade',
self::WITHDRAWAL_REASON_SOUND_QUALITY_ISNT_AS_EXPECTED => 'Sound quality isn\'t as expected',
self::WITHDRAWAL_REASON_CPU_PROBLEM => 'CPU problem',
self::WITHDRAWAL_REASON_LCD_PROBLEM => 'LCD problem',
self::WITHDRAWAL_REASON_ARRIVED_DIRTY => 'Arrived dirty',
self::WITHDRAWAL_REASON_WRONG_MODEL => 'Item is the wrong brand/model',
self::WITHDRAWAL_REASON_CANT_LOGIN => 'Can\'t log in to device/Can\'t update device',
self::WITHDRAWAL_REASON_BITLOCKER => 'Bitlocker/DomainLock',
self::WITHDRAWAL_REASON_NO_SKIN_COLOR => 'No skin colour',
self::WITHDRAWAL_REASON_WRONG_STORAGE_CPU => 'Item has the wrong storage capacity (GB)/ wrong central processing unit (CPU)',
self::WITHDRAWAL_REASON_OTHER => 'Other',
];
}
/**
* @return \DateTime
*/
public static function getClaimSystemSwitchDate(): \DateTime
{
return (new \DateTime())->setDate(2018, 2, 22)->setTime(0, 0);
}
/**
* @var int
*
* @Column(name="type", type="integer")
*/
private $type = self::TYPE_CLAIM;
/**
* @var string
*
* @Column(name="code", type="string", length=24)
*/
private $code;
/**
* @var Customer
*
* @ManyToOne(targetEntity="Customer", inversedBy="claims")
* @JoinColumn(name="customer_id", referencedColumnName="id", nullable=true)
*/
private $customer;
/**
* @var Document
*
* @ManyToOne(targetEntity="Document")
* @JoinColumn(name="document_id", referencedColumnName="id", nullable=true)
*/
private $document;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ClaimSetting", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $settings;
/**
* @var Document
*
* @ManyToOne(targetEntity="Document")
* @JoinColumn(name="credit_note_id", referencedColumnName="id", nullable=true)
*/
private $creditNote;
/**
* @var Product
*
* @ManyToOne(targetEntity="Product")
* @JoinColumn(name="product_id", referencedColumnName="id", nullable=true)
*/
private $product;
/**
* @var int
*
* @Column(name="product_type", type="integer", nullable=true)
*/
private $productType;
/**
* @var string
*
* @Column(name="product_title", type="string", length=128, nullable=true)
*/
private $productTitle;
/**
* @var string
*
* @Column(name="invoice_code", type="string", length=32, nullable=true)
*/
private $invoiceCode;
/**
* @var string
*
* @Column(name="first_name", type="string", length=64, nullable=true)
*/
private $firstName;
/**
* @var string
*
* @Column(name="last_name", type="string", length=64, nullable=true)
*/
private $lastName;
/**
* @var string
*
* @Column(name="business_name", type="string", length=128, nullable=true)
*/
private $businessName;
/**
* @var string
*
* @Column(name="street", type="string", length=128)
*/
private $street;
/**
* @var string
*
* @Column(name="city", type="string", length=64)
*/
private $city;
/**
* @var string
*
* @Column(name="zip", type="string", length=16)
*/
private $zip;
/**
* @var string
*
* @Column(name="email", type="string", length=64)
*/
private $email;
/**
* @var string
*
* @Column(name="phone", type="string", length=64)
*/
private $phone;
/**
* @var \DateTime
*
* @Column(name="courier_arrive_at", type="datetime", nullable=true)
*/
private $courierArriveAt;
/**
* @var string
*
* @Column(name="serial_number", type="string", length=128, nullable=true)
*/
private $serialNumber;
/**
* @var bool
*
* @Column(name="cable", type="boolean")
*/
private $cable = false;
/**
* @var \DateTime
*
* @Column(name="bought_date", type="datetime", nullable=true)
*/
private $boughtDate;
/**
* @var \DateTime
*
* @Column(name="received_date", type="datetime", nullable=true)
*/
private $receivedDate;
/**
* @var string
*
* @Column(name="technic_note", type="text", nullable=true)
*/
private $technicNote;
/**
* @var string
*
* @Column(name="customer_note", type="text", nullable=true)
*/
private $customerNote;
/**
* @var int
*
* @Column(name="receive_type", type="integer")
*/
private $receiveType = 0;
/**
* @var int
*
* @Column(name="return_type", type="integer")
*/
private $returnType = 0;
/**
* @var int
*
* @Column(name="last_status_id", type="integer")
*/
private int $lastStatusId;
/**
* @var int
*
* @Column(name="solution", type="integer")
*/
private $solution = self::SOLUTION_NOT_SET;
/**
* @var int
*
* @Column(name="solution_cause", type="integer")
*/
private $solutionCause = self::SOLUTION_CAUSE_NOT_SET;
/**
* @var string
*
* @Column(name="bank_account", type="string", length=64, nullable=true)
*/
private $bankAccount;
/**
* @var string
*
* @Column(name="bank_account_holder", type="string", length=128, nullable=true)
*/
private $bankAccountHolder;
/**
* @var array
*
* @Column(name="withdrawal_reason", type="array")
*/
private $withdrawalReason = [];
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ClaimStatus", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $statuses;
/**
* @var ArrayCollection
* @OneToMany(targetEntity="ClaimComment", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $comments;
/**
* @var ArrayCollection
* @OneToMany(targetEntity="ClaimMedia", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $medias;
/**
* @var int
*
* @Column(name="incoming_packeta_branch_id", type="integer", nullable=true)
*/
private $incomingPacketaBranchId;
/**
* @var string
*
* @Column(name="incoming_packeta_branch_label", type="string", length=128, nullable=true)
*/
private $incomingPacketaBranchLabel;
/**
* @var bool
*
* @Column(name="test", type="boolean")
*/
private $test = false;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ClaimTest", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $tests;
/**
* @var bool
*
* @Column(name="error", type="boolean")
*/
private $error = false;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ClaimError", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $errors;
/**
* @var \DateTime
*
* @Column(name="refund_date", type="datetime", nullable=true)
*/
private $refundDate;
/**
* @var Order
*
* @ManyToOne(targetEntity="Order", inversedBy="claims")
* @JoinColumn(name="order_id", referencedColumnName="id", nullable=true)
*/
private $order;
/**
* @var Order|null
*
* @ManyToOne(targetEntity="Order")
* @JoinColumn(name="replacement_order_id", referencedColumnName="id", nullable=true)
*/
private $replacementOrder = null;
/**
* @var string
*
* @Column(name="credit_note_numbers", type="text", nullable=true)
*/
private $creditNoteNumbers;
/**
* @var string
*
* @Column(name="job_description", type="text", nullable=true)
*/
private $jobDescription;
/**
* @var string
*
* @Column(name="parcel_import_link", type="text", nullable=true)
*/
private $parcelImportLink;
/**
* @var string
*
* @Column(name="parcel_export_link", type="text", nullable=true)
*/
private $parcelExportLink;
/**
* @var int
*
* @Column(name="selected_parcel", type="integer", nullable=true)
*/
private $selectedParcel;
/**
* @var int
*
* @Column(name="selected_import_parcel", type="integer", nullable=true)
*/
private $selectedImportParcel;
/**
* @var int
*
* @Column(name="box_count", type="integer")
*/
private $boxCount = 0;
/**
* @var int
*
* @Column(name="import_box_count", type="integer")
*/
private $importBoxCount = 0;
/**
* @var string
*
* @Column(name="dhlShipmentNumber", type="string", length=256, nullable=true)
*/
private $dhlShipmentNumber;
/**
* @var string
*
* @Column(name="fedex_shipment_number", type="string", length=256, nullable=true)
*/
private $fedexShipmentNumber;
/**
* @var string
*
* @Column(name="importDhlShipmentNumber", type="string", length=256, nullable=true)
*/
private $importDhlShipmentNumber;
/**
* @var string
*
* @Column(name="importFedexShipmentNumber", type="string", length=256, nullable=true)
*/
private $importFedexShipmentNumber;
/**
* @var string
*
* @Column(name="shipping_packeta_branch_id", type="string", nullable=true)
*/
private $shippingPacketaBranchId;
/**
* @var string
*
* @Column(name="shipping_packeta_branch_label", type="string", length=128, nullable=true)
*/
private $shippingPacketaBranchLabel;
/**
* @var PickupPoint
*
* @ManyToOne(targetEntity="PickupPoint", inversedBy="claims")
* @JoinColumn(name="pickup_point_id", referencedColumnName="id", nullable=true)
*/
private $pickupPoint;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="OrderPackage", mappedBy="claim", orphanRemoval=true)
* @OrderBy({"created" = "ASC"})
**/
private $orderPackages;
/**
* @var bool
*
* @Column(name="legitimate", type="boolean", nullable=true)
*/
private $legitimate = null;
/**
* @var string
*
* @Column(name="country", type="string", length=2, nullable=true)
*/
private $country;
/**
* @var float
*
* @Column(name="partial_refund", type="decimal", precision=10, scale=2, nullable=true)
*/
private $partialRefund = 0;
/**
* @var \DateTime
*
* @Column(name="deadline", type="datetime", nullable=true)
*/
private $deadline;
/**
* @var bool
*
* @Column(name="priority", type="boolean", nullable=false)
*/
private $priority = false;
/**
* Claim constructor.
*/
public function __construct()
{
parent::__construct();
$this->statuses = new ArrayCollection();
$this->comments = new ArrayCollection();
$this->tests = new ArrayCollection();
$this->errors = new ArrayCollection();
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @param int $type
*/
public function setType(int $type)
{
$this->type = $type;
}
/**
* @return string
*/
public function getCode(): string
{
return $this->code;
}
/**
* @param string $code
*/
public function setCode($code)
{
$this->code = $code;
}
/**
* @return Customer
*/
public function getCustomer()
{
return $this->customer;
}
/**
* @param Customer $customer
*/
public function setCustomer($customer)
{
$this->customer = $customer;
}
/**
* @return Document
*/
public function getDocument()
{
return $this->document;
}
/**
* @param Document $document
*/
public function setDocument($document)
{
$this->document = $document;
}
/**
* @return Document
*/
public function getCreditNote()
{
return $this->creditNote;
}
/**
* @param Document $document
*/
public function setCreditNote($document)
{
$this->creditNote = $document;
}
/**
* @return Product
*/
public function getProduct()
{
return $this->product;
}
/**
* @param Product $product
*/
public function setProduct($product)
{
$this->product = $product;
}
/**
* @return string
*/
public function getInvoiceCode()
{
return $this->invoiceCode;
}
/**
* @param string $invoiceCode
*/
public function setInvoiceCode($invoiceCode)
{
$this->invoiceCode = $invoiceCode;
}
/**
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @param string $firstName
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
}
/**
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* @param string $lastName
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
}
/**
* @return string
*/
public function getBusinessName()
{
return $this->businessName;
}
/**
* @param string $businessName
*/
public function setBusinessName($businessName)
{
$this->businessName = $businessName;
}
/**
* @return string
*/
public function getStreet()
{
return $this->street;
}
/**
* @param string $street
*/
public function setStreet($street)
{
$this->street = $street;
}
/**
* @return string
*/
public function getCity()
{
return $this->city;
}
/**
* @param string $city
*/
public function setCity($city)
{
$this->city = $city;
}
/**
* @return string
*/
public function getZip()
{
return $this->zip;
}
/**
* @param string $zip
*/
public function setZip($zip)
{
$this->zip = $zip;
}
/**
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* @param string $email
*/
public function setEmail($email)
{
$this->email = $email;
}
/**
* @return string
*/
public function getPhone()
{
return $this->phone;
}
/**
* @param string $phone
*/
public function setPhone($phone)
{
$this->phone = $phone;
}
/**
* @return string
*/
public function getSerialNumber()
{
return $this->serialNumber;
}
/**
* @param string $serialNumber
*/
public function setSerialNumber($serialNumber)
{
$this->serialNumber = $serialNumber;
}
/**
* @return boolean
*/
public function isCable()
{
return $this->cable;
}
/**
* @param boolean $cable
*/
public function setCable($cable)
{
$this->cable = $cable;
}
/**
* @return \DateTime
*/
public function getBoughtDate()
{
return $this->boughtDate;
}
/**
* @param \DateTime $boughtDate
*/
public function setBoughtDate($boughtDate)
{
$this->boughtDate = $boughtDate;
}
/**
* @return \DateTime
*/
public function getCourierArriveAt()
{
return $this->courierArriveAt;
}
/**
* @param \DateTime $courierArriveAt
*/
public function setCourierArriveAt($courierArriveAt)
{
$this->courierArriveAt = $courierArriveAt;
}
/**
* @return \DateTime
*/
public function getReceivedDate()
{
return $this->receivedDate;
}
/**
* @param \DateTime $receivedDate
*/
public function setReceivedDate($receivedDate)
{
$this->receivedDate = $receivedDate;
}
/**
* @return string
*/
public function getTechnicNote()
{
return $this->technicNote;
}
/**
* @param string $technicNote
*/
public function setTechnicNote($technicNote)
{
$this->technicNote = $technicNote;
}
/**
* @return string
*/
public function getCustomerNote()
{
return $this->customerNote;
}
/**
* @param string $customerNote
*/
public function setCustomerNote($customerNote)
{
$this->customerNote = $customerNote;
}
/**
* @return int
*/
public function getReceiveType()
{
return $this->receiveType;
}
/**
* @param int $receiveType
*/
public function setReceiveType($receiveType)
{
$this->receiveType = $receiveType;
}
/**
* @return int
*/
public function getReturnType()
{
return $this->returnType;
}
/**
* @param int $returnType
*/
public function setReturnType($returnType)
{
$this->returnType = $returnType;
}
/**
* @return int
*/
public function getSolution()
{
return $this->solution;
}
/**
* @param int $solution
*/
public function setSolution($solution)
{
$this->solution = $solution;
}
/**
* @return int
*/
public function getSolutionCause(): int
{
return $this->solutionCause;
}
/**
* @param int $solutionCause
*/
public function setSolutionCause(int $solutionCause)
{
$this->solutionCause = $solutionCause;
}
/**
* @return string|null
*/
public function getBankAccount(): ?string
{
return $this->bankAccount;
}
/**
* @param string|null $bankAccount
*/
public function setBankAccount(?string $bankAccount)
{
$this->bankAccount = $bankAccount;
}
/**
* @return string|null
*/
public function getBankAccountHolder(): ?string
{
return $this->bankAccountHolder;
}
/**
* @param string|null $bankAccountHolder
*/
public function setBankAccountHolder(?string $bankAccountHolder)
{
$this->bankAccountHolder = $bankAccountHolder;
}
/**
* @return array
*/
public function getWithdrawalReason(): array
{
return $this->withdrawalReason;
}
/**
* @param int $withdrawalReason
*/
public function setWithdrawalReason(array $withdrawalReason)
{
$this->withdrawalReason = $withdrawalReason;
}
/**
* @return ArrayCollection
*/
public function getStatuses()
{
return $this->statuses;
}
/**
* @return mixed
*/
public function getOlderThan8DaysForClaimStatus()
{
$claimStatusItemArrived = ClaimStatus::STATUS_TYPE_ACCEPTED_ITEM_ARRIVED;
return $this->statuses->filter(
function (ClaimStatus $claimStatus) use ($claimStatusItemArrived) {
return (
$claimStatus->getStatusType() == $claimStatusItemArrived &&
in_array(
$this->statuses->first()->getStatusType(),
[
ClaimStatus::STATUS_TYPE_ACCEPTED_ITEM_ARRIVED,
ClaimStatus::STATUS_TYPE_IN_PROGRESS,
ClaimStatus::STATUS_TYPE_WAITING_FOR_PARTS,
ClaimStatus::STATUS_TYPE_WAITING_FOR_SALES,
ClaimStatus::STATUS_TYPE_WAITING_FOR_SERVIS,
ClaimStatus::STATUS_TYPE_WAITING_FOR_AIKEN,
]
) &&
$claimStatus->getUpdated() < (new \DateTime())->modify("-8 days")
);
}
);
}
/**
* @return mixed
*/
public function getLastStatus(): mixed
{
return $this->statuses->first();
}
/**
* @return string
*/
public function getProductTitle()
{
return $this->productTitle;
}
/**
* @param string $productTitle
*/
public function setProductTitle($productTitle)
{
$this->productTitle = $productTitle;
}
/**
* @return int
*/
public function getProductType()
{
return $this->productType;
}
/**
* @param int $productType
*/
public function setProductType($productType)
{
$this->productType = $productType;
}
/**
* @return ArrayCollection
*/
public function getComments()
{
return $this->comments;
}
/**
* @return ArrayCollection
*/
public function getMedias()
{
return $this->medias;
}
/**
* @return int
*/
public function getIncomingPacketaBranchId()
{
return $this->incomingPacketaBranchId;
}
/**
* @param int $incomingPacketaBranchId
*/
public function setIncomingPacketaBranchId(?int $incomingPacketaBranchId)
{
$this->incomingPacketaBranchId = $incomingPacketaBranchId;
}
/**
* @return string
*/
public function getIncomingPacketaBranchLabel()
{
return $this->incomingPacketaBranchLabel;
}
/**
* @param string $incomingPacketaBranchLabel
*/
public function setIncomingPacketaBranchLabel(?string $incomingPacketaBranchLabel)
{
$this->incomingPacketaBranchLabel = $incomingPacketaBranchLabel;
}
/**
* @return bool
*/
public function hasTest(): bool
{
return $this->test;
}
/**
* @param bool $test
*/
public function setTest(bool $test)
{
$this->test = $test;
}
/**
* @return ArrayCollection
*/
public function getTests()
{
return $this->tests;
}
/**
* @param int $testType
* @return null|ClaimTest
*/
public function getClaimTestByTestType(int $testType): ?ClaimTest
{
foreach ($this->getTests() as $test) {
if ($test->getTestType() == $testType) {
return $test;
}
}
return null;
}
/**
* @return bool
*/
public function hasError(): bool
{
return $this->error;
}
/**
* @param bool $error
*/
public function setError(bool $error)
{
$this->error = $error;
}
/**
* @return ArrayCollection
*/
public function getErrors()
{
return $this->errors;
}
/**
* @param int $errorType
* @return null|ClaimError
*/
public function getClaimErrorByErrorType(int $errorType): ?ClaimError
{
foreach ($this->getErrors() as $error) {
if ($error->getErrorType() == $errorType) {
return $error;
}
}
return null;
}
public function removeClaimError($productType)
{
$this->errors->removeElement($productType);
}
/**
* @return \DateTime|null
*/
public function getRefundDate(): ?\DateTime
{
return $this->refundDate;
}
/**
* @param \DateTime|null $refundDate
* @return void
*/
public function setRefundDate(?\DateTime $refundDate): void
{
$this->refundDate = $refundDate;
}
/**
* @return Order|null
*/
public function getOrder(): ?Order
{
return $this->order;
}
/**
* @param Order|null $order
*/
public function setOrder(?Order $order)
{
$this->order = $order;
}
/**
* @return Order|null
*/
public function getReplacementOrder(): ?Order
{
return $this->replacementOrder;
}
/**
* @param Order|null $replacementOrder
*/
public function setReplacementOrder(?Order $replacementOrder)
{
$this->replacementOrder = $replacementOrder;
}
/**
* @return string|null
*/
public function getCreditNoteNumbers(): ?string
{
return $this->creditNoteNumbers;
}
/**
* @param string|null $creditNoteNumbers
* @return void
*/
public function setCreditNoteNumbers(?string $creditNoteNumbers): void
{
$this->creditNoteNumbers = $creditNoteNumbers;
}
/**
* @return string|null
*/
public function getJobDescription(): ?string
{
return $this->jobDescription;
}
/**
* @param string|null $jobDescription
* @return void
*/
public function setJobDescription(?string $jobDescription): void
{
$this->jobDescription = $jobDescription;
}
/**
* @return string|null
*/
public function getParcelImportLink(): ?string
{
return $this->parcelImportLink;
}
/**
* @param string|null $parcelImportLink
* @return void
*/
public function setParcelImportLink(?string $parcelImportLink): void
{
$this->parcelImportLink = $parcelImportLink;
}
/**
* @return string|null
*/
public function getParcelExportLink(): ?string
{
return $this->parcelExportLink;
}
/**
* @param string|null $parcelExportLink
* @return void
*/
public function setParcelExportLink(?string $parcelExportLink): void
{
$this->parcelExportLink = $parcelExportLink;
}
/**
* @return string
*/
public function getSelectedParcel()
{
return $this->selectedParcel;
}
/**
* @param int|string $selectedParcel
*/
public function setSelectedParcel($selectedParcel)
{
$this->selectedParcel = $selectedParcel;
}
/**
* @return int
*/
public function getBoxCount()
{
return $this->boxCount;
}
/**
* @param int $boxCount
*/
public function setBoxCount($boxCount)
{
$this->boxCount = $boxCount;
}
/**
* @return string
*/
public function getDhlShipmentNumber()
{
return $this->dhlShipmentNumber;
}
/**
* @return string
*/
public function getFedexShipmentNumber()
{
return $this->fedexShipmentNumber;
}
/**
* @param string $dhlShipmentNumber
*/
public function setDhlShipmentNumber($dhlShipmentNumber)
{
$this->dhlShipmentNumber = $dhlShipmentNumber;
}
/**
* @param $fedexShipmentNumber
* @return void
*/
public function setFedexShipmentNumber($fedexShipmentNumber)
{
$this->fedexShipmentNumber = $fedexShipmentNumber;
}
/**
* @return null|ArrayCollection
*/
public function getPackages(): ?ArrayCollection
{
if ($this->getOrder() == null) {
return null;
}
return $this->getOrder()->getPackages()->filter(function (OrderPackage $orderPackage) {
return $orderPackage->getClaim() == $this
&& $orderPackage->getClaimPackageType() == OrderPackage::CLAIM_PACKAGE_TYPE_NORMAL;
});
}
/**
* @return ArrayCollection|null
*/
public function getImportPackages(): ?ArrayCollection
{
if ($this->getOrder() == null) {
return null;
}
return $this->getOrder()->getPackages()->filter(function (OrderPackage $orderPackage) {
return $orderPackage->getClaim() == $this
&& $orderPackage->getClaimPackageType() == OrderPackage::CLAIM_PACKAGE_TYPE_RETURN;
});
}
/**
* @return bool
*/
public function hasAnyPackage(): bool
{
return $this->hasPackage() || $this->hasImportPackage();
}
/**
* @return bool
*/
public function hasPackage(): bool
{
$packages = $this->getPackages();
if ( is_null($packages) ) {
return false;
}
return $packages->count() > 0 ? true : false;
}
/**
* @return int
*/
public function hasImportPackage(): int
{
$packages = $this->getImportPackages();
if ( is_null($packages) ) {
return false;
}
return $packages->count() > 0 ? true : false;
}
/**
* @return int
*/
public function getShippingPacketaBranchId()
{
return $this->shippingPacketaBranchId;
}
/**
* @param string $shippingPacketaBranchId
*/
public function setShippingPacketaBranchId(?string $shippingPacketaBranchId)
{
$this->shippingPacketaBranchId = $shippingPacketaBranchId;
}
/**
* @return string
*/
public function getShippingPacketaBranchLabel()
{
return $this->shippingPacketaBranchLabel;
}
/**
* @param string $shippingPacketaBranchLabel
*/
public function setShippingPacketaBranchLabel(?string $shippingPacketaBranchLabel)
{
$this->shippingPacketaBranchLabel = $shippingPacketaBranchLabel;
}
/**
* @return PickupPoint
*/
public function getPickupPoint()
{
return $this->pickupPoint;
}
/**
* @param PickupPoint|null $pickupPoint
*/
public function setPickupPoint(?PickupPoint $pickupPoint)
{
$this->pickupPoint = $pickupPoint;
}
/**
* @return void
*/
public function setLegitimate(bool $legitimate): void
{
$this->legitimate = $legitimate;
}
/**
* @return bool
*/
public function isLegitimate(): bool
{
return $this->legitimate;
}
/**
* @return string|null
*/
public function getCountry(): ?string
{
return $this->country;
}
/**
* @param string|null $country
*/
public function setCountry(?string $country)
{
$this->country = $country;
}
/**
* @return float
*/
public function getPartialRefund()
{
return $this->partialRefund;
}
/**
* @param null|float $partialRefund
*/
public function setPartialRefund(?float $partialRefund)
{
$this->partialRefund = $partialRefund;
}
/**
* @return \DateTime|null
*/
public function getDeadline(): \DateTime|null
{
return $this->deadline;
}
/**
* @param \DateTime|null $deadline
*
* @return void
*/
public function setDeadline(\DateTime|null $deadline): void
{
$this->deadline = $deadline;
}
/**
* @param Domain $domain
*
* @return void
*/
public function functionSetDeadlineBasedOnDomain(Domain $domain)
{
if ($this->getDeadline() != null) {
return;
}
$statuses = $this->getStatuses()->filter(function (ClaimStatus $claimStatus){
if ($claimStatus->getStatusType() == ClaimStatus::STATUS_TYPE_ACCEPTED_ITEM_ARRIVED){
return $claimStatus;
}
});
if ($statuses->count() == 0) {
$this->setDeadline(null);
return;
}
$createdDate = $statuses->first()->getCreated();
if ($domain->getId() == Domain::DOMAIN_ID_B2C_EU) {
$deadline = $createdDate->modify('+2 days');
}
else {
$deadline = $createdDate->modify('+8 day');
}
$this->setDeadline($deadline);
}
/**
* @return bool
*/
public function isPriority(): bool
{
return $this->priority;
}
/**
* @param bool $priority
*
* @return void
*/
public function setPriority(bool $priority): void
{
$this->priority = $priority;
}
/**
* @return int
*/
public function getSelectedImportParcel(): int|null
{
return $this->selectedImportParcel;
}
/**
* @param int $selectedImportParcel
*
* @return void
*/
public function setSelectedImportParcel(int|null $selectedImportParcel): void
{
$this->selectedImportParcel = $selectedImportParcel;
}
/**
* @return string
*/
public function getImportFedexShipmentNumber(): string|null
{
return $this->importFedexShipmentNumber;
}
/**
* @param string $importFedexShipmentNumber
*
* @return void
*/
public function setImportFedexShipmentNumber(string|null $importFedexShipmentNumber): void
{
$this->importFedexShipmentNumber = $importFedexShipmentNumber;
}
/**
* @return string
*/
public function getImportDhlShipmentNumber(): string|null
{
return $this->importDhlShipmentNumber;
}
/**
* @param string $importDhlShipmentNumber
*
* @return void
*/
public function setImportDhlShipmentNumber(string|null $importDhlShipmentNumber): void
{
$this->importDhlShipmentNumber = $importDhlShipmentNumber;
}
/**
* @return int
*/
public function getImportBoxCount(): int
{
return $this->importBoxCount;
}
/**
* @param int $importBoxCount
*
* @return void
*/
public function setImportBoxCount(int $importBoxCount): void
{
$this->importBoxCount = $importBoxCount;
}
/**
* @return int
*/
public function getLastStatusId(): int
{
return $this->lastStatusId;
}
/**
* @param int $lastStatusId
* @return void
*/
public function setLastStatusId(int $lastStatusId): void
{
$this->lastStatusId = $lastStatusId;
}
/**
* @return string|null
*/
public function getClaimFedexShipmentNumber(): ?string
{
return $this->getSetting(ClaimSetting::TYPE_CLAIM_FEDEX_TRACKING_NUMBER)?->getValue();
}
/**
* @return string|null
*/
public function getClaimImportFedexShipmentNumber(): ?string
{
return $this->getSetting(ClaimSetting::TYPE_CLAIM_IMPORT_FEDEX_TRACKING_NUMBER)?->getValue();
}
/**
* @param int $settingCode
*
* @return ClaimSetting|null
*/
private function getSetting(int $settingCode): ?ClaimSetting
{
foreach ($this->settings as $setting) {
if ($setting->getType() == $settingCode) {
return $setting;
}
}
return null;
}
}