<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
use App\Trait\TimestampableEntity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\MaxDepth;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;
#[ORM\Entity]
#[ApiResource(
iri: 'Contract',
itemOperations: [
'get' => [
'security' => "is_granted('ROLE_USER')",
'normalization_context' => [
'groups' => 'contract:item:get',
'enable_max_depth' => true
]
],
'put' => [
'security' => "
is_granted('ROLE_ADMIN') or
is_granted('ROLE_OPERATOR') or
is_granted('ROLE_OPERATIONS_COORDINATOR') or
is_granted('ROLE_INTERN')
",
'normalization_context' => [
'groups' => 'contract:item:put',
'enable_max_depth' => true
],
'denormalization_context' => [
'groups' => 'contract:item:put',
'enable_max_depth' => true
],
],
'delete' => [
'security' => "
is_granted('ROLE_ADMIN') or
is_granted('ROLE_OPERATOR') or
is_granted('ROLE_OPERATIONS_COORDINATOR') or
is_granted('ROLE_INTERN')
",
],
],
collectionOperations: [
'get' => [
'security' => "is_granted('ROLE_USER')",
'normalization_context' => [
'groups' => [
'contract:collection:get',
'createdAt'
],
'enable_max_depth' => true,
],
],
'post' => [
'security' => "
is_granted('ROLE_ADMIN') or
is_granted('ROLE_OPERATOR') or
is_granted('ROLE_OPERATIONS_COORDINATOR') or
is_granted('ROLE_INTERN')
",
'normalization_context' => [
'groups' => 'contract:collection:post',
'enable_max_depth' => true
],
'denormalization_context' => [
'groups' => 'contract:collection:post',
'enable_max_depth' => true
],
],
],
)]
#[ApiFilter(
SearchFilter::class,
properties: [
'contractNumber' => 'start',
'contractType' => 'exact',
'vessel.vesselName' => 'partial',
'charterer.companyName' => 'partial',
'owner.companyName' => 'partial',
'broker.name' => 'partial',
'operator.name' => 'partial',
'laycanStart' => 'start',
'laycanEnd' => 'start',
'demurrageStatus' => 'exact',
'addressCommission' => 'partial',
'brokerageCommission' => 'partial',
'finalDemurrageCost' => 'partial',
'demurragePaymentDate' => 'start',
'status' => 'exact',
'createdAt' => 'start',
'broker.desk' => 'partial',
'freightType' => 'exact',
'freightInvoiceStatus' => 'exact',
'freightInvoiceNumber' => 'partial',
'freightInvoiceCabotagePtax' => 'partial',
'freightInvoicePaymentInvoiceDiff' => 'partial',
'freightInvoiceBankInvoiced' => 'exact',
'demurrageInvoiceStatus' => 'exact',
'demurrageInvoiceNumber' => 'partial',
'demurrageInvoiceCabotagePtax' => 'partial',
'demurrageInvoicePaymentInvoiceDiff' => 'partial',
'demurrageInvoiceBankInvoiced' => 'exact',
],
)]
#[ApiFilter(
OrderFilter::class,
properties: [
'contractNumber',
'contractType',
'vessel.vesselName',
'charterer.companyName',
'owner.companyName',
'broker.name',
'operator.name',
'laycanStart',
'laycanEnd',
'demurrageStatus',
'addressCommission',
'brokerageCommission',
'finalDemurrageCost',
'demurragePaymentDate',
'status',
'createdAt',
'broker.desk',
'freightType',
'freightInvoiceStatus',
'freightInvoiceNumber',
'freightInvoiceTaxAction',
'freightInvoiceCabotagePtax',
'freightInvoicePaymentInvoiceDiff',
'freightInvoiceBankInvoiced',
'freightInvoicePaymentDate',
'freightInvoiceInvoiceDate',
'demurrageInvoiceStatus',
'demurrageInvoiceNumber',
'demurrageInvoiceTaxAction',
'demurrageInvoiceCabotagePtax',
'demurrageInvoicePaymentInvoiceDiff',
'demurrageInvoiceBankInvoiced',
'demurrageInvoicePaymentDate',
'demurrageInvoiceInvoiceDate',
],
)]
#[ApiFilter(
BooleanFilter::class,
properties: [
'freightInvoiceTaxAction',
'demurrageInvoiceTaxAction',
],
)]
class Contract
{
use TimestampableEntity;
public const CONTRACT_TYPE_SPOT = 'SPOT';
public const CONTRACT_TYPE_COA = 'COA';
public const CONTRACT_TYPE_TIME_CHARTER = 'TIME_CHARTER';
public const CONTRACT_TYPES = [
self::CONTRACT_TYPE_SPOT,
self::CONTRACT_TYPE_COA,
self::CONTRACT_TYPE_TIME_CHARTER,
];
public const COST_TYPE_PMT = 'PMT';
public const COST_TYPE_LUMPSUM = 'LUMPSUM';
public const COST_TYPE_WS = 'WS';
public const COST_TYPES = [
self::COST_TYPE_PMT,
self::COST_TYPE_LUMPSUM,
self::COST_TYPE_WS,
];
public const CONTRACT_STATUS_TRANSIT_TO_LOAD_PORT = 'TRANSIT_TO_LOAD_PORT';
public const CONTRACT_STATUS_AT_LOAD_PORT = 'AT_LOAD_PORT';
public const CONTRACT_STATUS_LOADING = 'LOADING';
public const CONTRACT_STATUS_TRANSIT_TO_DISCHARGE_PORT = 'TRANSIT_TO_DISCHARGE_PORT';
public const CONTRACT_STATUS_AT_DISCHARGE_PORT = 'AT_DISCHARGE_PORT';
public const CONTRACT_STATUS_DISCHARGING = 'DISCHARGING';
public const CONTRACT_STATUS_OPERATIONS_COMPLETED = 'OPERATIONS_COMPLETED';
public const CONTRACT_STATUS_DEMURRAGE = 'DEMURRAGE';
public const CONTRACT_STATUS_UNASSIGNED = 'UNASSIGNED';
public const CONTRACT_STATUS_COMPLETED = 'COMPLETED';
public const CONTRACT_STATUS_ACTIVE = 'ACTIVE';
public const CONTRACT_STATUS_CANCELED = 'CANCELED';
public const CONTRACT_STATUSES = [
self::CONTRACT_STATUS_TRANSIT_TO_LOAD_PORT,
self::CONTRACT_STATUS_AT_LOAD_PORT,
self::CONTRACT_STATUS_LOADING,
self::CONTRACT_STATUS_TRANSIT_TO_DISCHARGE_PORT,
self::CONTRACT_STATUS_AT_DISCHARGE_PORT,
self::CONTRACT_STATUS_DISCHARGING,
self::CONTRACT_STATUS_OPERATIONS_COMPLETED,
self::CONTRACT_STATUS_DEMURRAGE,
self::CONTRACT_STATUS_UNASSIGNED,
self::CONTRACT_STATUS_COMPLETED,
self::CONTRACT_STATUS_ACTIVE,
self::CONTRACT_STATUS_CANCELED,
];
public const DEMURRAGE_STATUS_AWAITING_CLAIM = 'AWAITING_CLAIM';
public const DEMURRAGE_STATUS_CLAIM_RECEIVED = 'CLAIM_RECEIVED';
public const DEMURRAGE_STATUS_CLAIM_SENT = 'CLAIM_SENT';
public const DEMURRAGE_STATUS_NO_DEMURRAGE = 'NO_DEMURRAGE';
public const DEMURRAGE_STATUS_IN_ARBITRATION = 'IN_ARBITRATION';
public const DEMURRAGE_STATUS_PAID = 'PAID';
public const DEMURRAGE_STATUSES = [
self::DEMURRAGE_STATUS_AWAITING_CLAIM,
self::DEMURRAGE_STATUS_CLAIM_RECEIVED,
self::DEMURRAGE_STATUS_CLAIM_SENT,
self::DEMURRAGE_STATUS_NO_DEMURRAGE,
self::DEMURRAGE_STATUS_IN_ARBITRATION,
self::DEMURRAGE_STATUS_PAID,
];
public const DEMURRAGE_INVOICE_STATUS_INVOICED = 'INVOICED';
public const DEMURRAGE_INVOICE_STATUS_NOT_INVOICED = 'NOT_INVOICED';
public const DEMURRAGE_INVOICE_STATUS_PAID = 'PAID';
public const DEMURRAGE_INVOICE_STATUS_CANCELED = 'CANCELED';
public const DEMURRAGE_INVOICE_STATUSES = [
self::DEMURRAGE_INVOICE_STATUS_INVOICED,
self::DEMURRAGE_INVOICE_STATUS_NOT_INVOICED,
self::DEMURRAGE_INVOICE_STATUS_PAID,
self::DEMURRAGE_INVOICE_STATUS_CANCELED,
];
public const FREIGHT_INVOICE_STATUS_INVOICED = 'INVOICED';
public const FREIGHT_INVOICE_STATUS_NOT_INVOICED = 'NOT_INVOICED';
public const FREIGHT_INVOICE_STATUS_PAID = 'PAID';
public const FREIGHT_INVOICE_STATUS_CANCELED = 'CANCELED';
public const FREIGHT_INVOICE_STATUSES = [
self::FREIGHT_INVOICE_STATUS_INVOICED,
self::FREIGHT_INVOICE_STATUS_NOT_INVOICED,
self::FREIGHT_INVOICE_STATUS_PAID,
self::FREIGHT_INVOICE_STATUS_CANCELED,
];
public const BANK_ITAU = 'ITAU';
public const BANK_FINECO = 'FINECO';
public const BANKS = [
self::BANK_ITAU,
self::BANK_FINECO,
];
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'NONE')]
#[ORM\Column(type: 'uuid', unique: true)]
private ?UuidInterface $id = null;
#[ORM\Column(type: 'string', nullable: false, unique: true)]
#[ApiProperty()]
#[Assert\NotBlank]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $contractNumber = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\NotBlank]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::CONTRACT_TYPES,
message: 'The type is not valid.'
)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $contractType = null;
#[ORM\Column(type: 'datetime', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $laycanStart = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $laycanStartDate = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $laycanStartTime = null;
#[ORM\Column(type: 'datetime', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $laycanEnd = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $laycanEndDate = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $laycanEndTime = null;
#[ORM\ManyToOne(
targetEntity: Vessel::class,
inversedBy: 'contracts'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?Vessel $vessel = null;
#[ORM\ManyToOne(
targetEntity: Owner::class,
inversedBy: 'contracts'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Owner $owner = null;
#[ORM\ManyToOne(
targetEntity: Charterer::class,
inversedBy: 'contracts'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Charterer $charterer = null;
#[ORM\ManyToOne(
targetEntity: User::class,
inversedBy: 'contracts'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?User $broker = null;
#[ORM\ManyToOne(
targetEntity: User::class,
inversedBy: 'operations'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?User $operator = null;
#[ORM\Column(type: 'string', nullable: false)]
#[ApiProperty()]
#[Assert\NotBlank]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::CONTRACT_STATUSES,
message: 'The status is not valid.'
)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $status = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightCost = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightCostCurrency = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::COST_TYPES,
message: 'The type is not valid.'
)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightType = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurragePerDay = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurragePerDayCurrency = null;
#[ORM\OneToMany(
targetEntity: AdditionalCost::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $additionalCosts = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $addressCommission = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $brokerageCommission = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $liftingsMin = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $liftingsMax = null;
#[ORM\OneToMany(
targetEntity: Media::class,
mappedBy: 'contract',
cascade: ['remove'],
orphanRemoval: true
)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $documents = null;
#[ORM\OneToMany(
targetEntity: PortCall::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
#[ORM\OrderBy(['portIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $portCalls = null;
#[ORM\OneToMany(
targetEntity: OperationReport::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
// #[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $operationReports = null;
#[ORM\OneToMany(
targetEntity: ContractCargo::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $cargoItems = null;
#[ORM\OneToMany(
targetEntity: Payment::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $payments = null;
#[ORM\OneToMany(
targetEntity: Hire::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
#[ORM\OrderBy(['hireIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $hires = null;
#[ORM\OneToMany(
targetEntity: Contract::class,
mappedBy: 'contractCoa',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(2)]
private ?Collection $liftings = null;
#[ORM\ManyToOne(
targetEntity: Checklist::class,
inversedBy: 'contracts'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Checklist $checklist = null;
#[ORM\ManyToMany(
targetEntity: Task::class,
inversedBy: 'contracts',
cascade: ['persist']
)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $checkedTasks = null;
#[ORM\Column(type: 'text', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $checklistNotes = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::DEMURRAGE_STATUSES,
message: 'The status is not valid.'
)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageStatus = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?int $demurrageTimeBar = null;
#[ORM\Column(type: 'date', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $demurragePaymentDate = null;
#[ORM\Column(type: 'date', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $demurrageClaimDate = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $finalDemurrageCost = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $finalDemurrageCostCurrency = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurragePaidByCharterer = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurragePaidByChartererCurrency = null;
#[ORM\Column(type: 'datetime', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $etaArrival = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $etaArrivalDate = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $etaArrivalTime = null;
#[ORM\Column(type: 'datetime', nullable: true)]
#[ApiProperty()]
// #[Assert\NotBlank]
#[Assert\Type(\DateTimeInterface::class)]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $redeliveryEtaArrival = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $redeliveryEtaArrivalDate = null;
#[ApiProperty()]
#[Groups([
'contract:item:get'
])]
private ?string $redeliveryEtaArrivalTime = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice1 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice2 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice3 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice4 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice5 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice6 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryAproxNotice7 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice1 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice2 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice3 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice4 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice5 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice6 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $deliveryFirmNotice7 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice1 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice2 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice3 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice4 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice5 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice6 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryAproxNotice7 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice1 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice2 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice3 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice4 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice5 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice6 = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Assert\Type('integer')]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?int $redeliveryFirmNotice7 = null;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?bool $deliveryNoticesNotAplicable = false;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?bool $redeliveryNoticesNotAplicable = false;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?bool $shipDelivered = false;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?bool $shipRedelivered = false;
#[ORM\ManyToOne(
targetEntity: Port::class,
inversedBy: 'deliveryPorts1'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Port $deliveryPort1 = null;
#[ORM\ManyToOne(
targetEntity: Port::class,
inversedBy: 'deliveryPorts2'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Port $deliveryPort2 = null;
#[ORM\ManyToOne(
targetEntity: Port::class,
inversedBy: 'redeliveryPorts1'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Port $redeliveryPort1 = null;
#[ORM\ManyToOne(
targetEntity: Port::class,
inversedBy: 'redeliveryPorts2'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Port $redeliveryPort2 = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $hirePerDay = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
private ?string $hirePerDayCurrency = null;
#[ORM\Column(type: 'float', nullable: true)]
#[ApiProperty()]
#[Assert\Type('float')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?float $period = null;
#[ORM\OneToMany(
targetEntity: DeliveryNotice::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $deliveryNotices = null;
#[ORM\OneToMany(
targetEntity: RedeliveryNotice::class,
mappedBy: 'contract',
cascade: ['persist', 'remove'],
orphanRemoval: true
)]
##[ORM\OrderBy(['taskIndex' => 'ASC'])]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Collection $redeliveryNotices = null;
#[ORM\ManyToOne(
targetEntity: Contract::class,
inversedBy: 'liftings'
)]
#[ORM\JoinColumn(nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
// 'contract:collection:get',
'contract:collection:post'
])]
#[MaxDepth(1)]
private ?Contract $contractCoa = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $loadPortsResume = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $dischargePortsResume = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $cargoResume = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $cargoVolumeM3 = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $cargoVolumeMT = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $totalAmount = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $totalAmountCurrency = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?\DateTimeInterface $demurrageDeadline = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?int $demurrageDaysLeft = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::FREIGHT_INVOICE_STATUSES,
message: 'The status is not valid.'
)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceStatus = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceNumber = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceOwnerNumber = null;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?bool $freightInvoiceTaxAction = false;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceFreightOrHire = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceFreightOrHireCurrency = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceAdditionalCost = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceAdditionalCostCurrency = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $freightInvoiceTotalFreightOrHire = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $freightInvoiceTotalFreightOrHireCurrency = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceTotalCommission = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceTotalCommissionCurrency = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceCabotagePtax = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceCabotageTotalFreight = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceCabotageTotalFreightCurrency = 'BRL';
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $freightInvoiceCabotageTotalCommission = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $freightInvoiceCabotageTotalCommissionCurrency = 'BRL';
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceAmountReceived = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceAmountReceivedCurrency = 'USD';
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceDifference = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $freightInvoiceDifferenceCurrency = null;
#[ORM\Column(type: 'date', nullable: true)]
#[Assert\Type(\DateTimeInterface::class)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $freightInvoicePaymentDate = null;
#[ORM\Column(type: 'date', nullable: true)]
#[Assert\Type(\DateTimeInterface::class)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $freightInvoiceDate = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?int $freightInvoicePaymentInvoiceDiff = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::BANKS,
message: 'The bank is not valid.'
)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceBankInvoiced = null;
#[ORM\Column(type: 'text', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $freightInvoiceComments = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::DEMURRAGE_INVOICE_STATUSES,
message: 'The status is not valid.'
)]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceStatus = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceNumber = null;
#[ORM\Column(type: 'string', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceOwnerNumber = null;
#[ORM\Column(type: 'boolean', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?bool $demurrageInvoiceTaxAction = false;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $demurrageInvoiceTotalCommission = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $demurrageInvoiceTotalCommissionCurrency = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceCabotagePtax = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $demurrageInvoiceCabotageTotalDemurrage = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $demurrageInvoiceCabotageTotalDemurrageCurrency = 'BRL';
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $demurrageInvoiceCabotageTotalCommission = null;
// #[ORM\Column(type: 'string', nullable: true)]
// #[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
// 'contract:item:put',
'contract:collection:get',
// 'contract:collection:post'
])]
private ?string $demurrageInvoiceCabotageTotalCommissionCurrency = 'BRL';
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceAmountReceived = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceAmountReceivedCurrency = 'USD';
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $demurrageInvoiceDifference = null;
#[ApiProperty()]
#[Groups([
'contract:collection:get',
'contract:item:get'
])]
private ?string $demurrageInvoiceDifferenceCurrency = null;
#[ORM\Column(type: 'date', nullable: true)]
#[Assert\Type(\DateTimeInterface::class)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $demurrageInvoicePaymentDate = null;
#[ORM\Column(type: 'date', nullable: true)]
#[Assert\Type(\DateTimeInterface::class)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?\DateTimeInterface $demurrageInvoiceDate = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?int $demurrageInvoicePaymentInvoiceDiff = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Assert\Type('string')]
#[Assert\Choice(
choices: self::BANKS,
message: 'The bank is not valid.'
)]
#[ApiProperty()]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceBankInvoiced = null;
#[ORM\Column(type: 'text', nullable: true)]
#[ApiProperty()]
#[Assert\Type('string')]
#[Groups([
'contract:item:get',
'contract:item:put',
'contract:collection:get',
'contract:collection:post'
])]
private ?string $demurrageInvoiceComments = null;
public function __construct()
{
$this->id = Uuid::uuid4();
$this->documents = new ArrayCollection();
$this->portCalls = new ArrayCollection();
$this->operationReports = new ArrayCollection();
// $this->reportedIncidents = new ArrayCollection();
$this->cargoItems = new ArrayCollection();
$this->checkedTasks = new ArrayCollection();
$this->payments = new ArrayCollection();
$this->hires = new ArrayCollection();
$this->liftings = new ArrayCollection();
$this->deliveryNotices = new ArrayCollection();
$this->redeliveryNotices = new ArrayCollection();
}
public function getId(): ?UuidInterface
{
return $this->id;
}
public function setContractNumber(?string $contractNumber): void
{
$this->contractNumber = $contractNumber;
}
public function getContractNumber(): ?string
{
return $this->contractNumber;
}
public function setContractType(?string $contractType): void
{
$this->contractType = $contractType;
}
public function getContractType(): ?string
{
return $this->contractType;
}
public function setLaycanStart(?\DateTimeInterface $laycanStart): void
{
$this->laycanStart = $laycanStart;
}
public function getLaycanStart(): ?\DateTimeInterface
{
return $this->laycanStart;
}
public function getLaycanStartDate(): ?string
{
return $this->laycanStart ? $this->laycanStart->format('Y-m-d') : null;
}
public function getLaycanStartTime(): ?string
{
return $this->laycanStart ? $this->laycanStart->format('H:i') : null;
}
public function setLaycanEnd(?\DateTimeInterface $laycanEnd): void
{
$this->laycanEnd = $laycanEnd;
}
public function getLaycanEnd(): ?\DateTimeInterface
{
return $this->laycanEnd;
}
public function getLaycanEndDate(): ?string
{
return $this->laycanEnd ? $this->laycanEnd->format('Y-m-d') : null;
}
public function getLaycanEndTime(): ?string
{
return $this->laycanEnd ? $this->laycanEnd->format('H:i') : null;
}
public function setVessel(?Vessel $vessel): void
{
$this->vessel = $vessel;
}
public function getVessel(): ?Vessel
{
return $this->vessel;
}
public function setOwner(?Owner $owner): void
{
$this->owner = $owner;
}
public function getOwner(): ?Owner
{
return $this->owner;
}
public function setCharterer(?Charterer $charterer): void
{
$this->charterer = $charterer;
}
public function getCharterer(): ?Charterer
{
return $this->charterer;
}
public function addDocument(Media $document): void
{
$document->setContract($this);
$this->documents[] = $document;
}
public function removeDocument(Media $document): void
{
$this->documents->removeElement($document);
}
public function getDocuments(): Collection
{
return $this->documents;
}
public function setBroker(?User $broker): void
{
$this->broker = $broker;
}
public function getBroker(): ?User
{
return $this->broker;
}
public function setOperator(?User $operator): void
{
$this->operator = $operator;
}
public function getOperator(): ?User
{
return $this->operator;
}
public function setDemurragePerDay(?string $demurragePerDay): void
{
$this->demurragePerDay = $demurragePerDay;
}
public function getDemurragePerDay(): ?string
{
return $this->demurragePerDay;
}
public function getDemurragePerDayCurrency(): ?string
{
return $this->demurragePerDayCurrency;
}
public function setDemurragePerDayCurrency(?string $demurragePerDayCurrency): void
{
$this->demurragePerDayCurrency = $demurragePerDayCurrency;
}
public function setAddressCommission(?string $addressCommission): void
{
$this->addressCommission = $addressCommission;
}
public function getAddressCommission(): ?string
{
return $this->addressCommission;
}
public function setBrokerageCommission(?string $brokerageCommission): void
{
$this->brokerageCommission = $brokerageCommission;
}
public function getBrokerageCommission(): ?string
{
return $this->brokerageCommission;
}
public function setLiftingsMin(?int $liftingsMin): void
{
$this->liftingsMin = $liftingsMin;
}
public function getLiftingsMin(): ?int
{
return $this->liftingsMin;
}
public function setLiftingsMax(?int $liftingsMax): void
{
$this->liftingsMax = $liftingsMax;
}
public function getLiftingsMax(): ?int
{
return $this->liftingsMax;
}
public function addPortCall(PortCall $portCall): void
{
$portCall->setContract($this);
$this->portCalls[] = $portCall;
}
public function removePortCall(PortCall $portCall): void
{
$this->portCalls->removeElement($portCall);
}
public function getPortCalls(): Collection
{
return $this->portCalls;
}
public function addOperationReport(OperationReport $operationReport): void
{
$operationReport->setContract($this);
$this->operationReports[] = $operationReport;
}
public function removeOperationReport(OperationReport $operationReport): void
{
$this->operationReports->removeElement($operationReport);
}
public function getOperationReports(): Collection
{
return $this->operationReports;
}
public function addCargoItem(ContractCargo $cargoItem): void
{
$cargoItem->setContract($this);
$this->cargoItems[] = $cargoItem;
}
public function removeCargoItem(ContractCargo $cargoItem): void
{
$this->cargoItems->removeElement($cargoItem);
}
public function getCargoItems(): Collection
{
return $this->cargoItems;
}
public function getPayments(): Collection
{
return $this->payments;
}
public function addPayment(Payment $payment): void
{
$payment->setContract($this);
$this->payments[] = $payment;
}
public function removePayment(Payment $payment): void
{
$this->payments->removeElement($payment);
}
public function getHires(): Collection
{
return $this->hires;
}
public function addHire(Hire $hire): void
{
$hire->setContract($this);
$this->hires[] = $hire;
}
public function removeHire(Hire $hire): void
{
$this->hires->removeElement($hire);
}
public function addLifting(Contract $lifting): void
{
$lifting->setContractCoa($this);
$this->liftings[] = $lifting;
}
public function removeLifting(Contract $lifting): void
{
$this->liftings->removeElement($lifting);
}
public function getLiftings(): Collection
{
return $this->liftings;
}
public function getFreightCost(): ?string
{
return $this->freightCost;
}
public function setFreightCost(?string $freightCost): void
{
$this->freightCost = $freightCost;
}
public function getFreightCostCurrency(): ?string
{
return $this->freightCostCurrency;
}
public function setFreightCostCurrency(?string $freightCostCurrency): void
{
$this->freightCostCurrency = $freightCostCurrency;
}
public function getFreightType(): ?string
{
return $this->freightType;
}
public function setFreightType(?string $freightType): void
{
$this->freightType = $freightType;
}
public function addAdditionalCost(AdditionalCost $additionalCost): void
{
$additionalCost->setContract($this);
$this->additionalCosts[] = $additionalCost;
}
public function removeAdditionalCost(AdditionalCost $additionalCost): void
{
$this->additionalCosts->removeElement($additionalCost);
}
public function getAdditionalCosts(): ?Collection
{
return $this->additionalCosts;
}
public function setStatus(?string $status): void
{
$this->status = $status;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setChecklist(?Checklist $checklist): void
{
$this->checklist = $checklist;
}
public function getChecklist(): ?Checklist
{
return $this->checklist;
}
public function addCheckedTask(Task $checkedTask): void
{
$this->checkedTasks[] = $checkedTask;
}
public function removeCheckedTask(Task $checkedTask): void
{
$this->checkedTasks->removeElement($checkedTask);
}
public function getCheckedTasks(): Collection
{
return $this->checkedTasks;
}
public function setChecklistNotes(?string $checklistNotes): void
{
$this->checklistNotes = $checklistNotes;
}
public function getChecklistNotes(): ?string
{
return $this->checklistNotes;
}
public function setDemurrageStatus(?string $demurrageStatus): void
{
$this->demurrageStatus = $demurrageStatus;
}
public function getDemurrageStatus(): ?string
{
return $this->demurrageStatus;
}
public function setDemurrageTimeBar(?int $demurrageTimeBar): void
{
$this->demurrageTimeBar = $demurrageTimeBar;
}
public function getDemurrageTimeBar(): ?int
{
return $this->demurrageTimeBar;
}
public function setDemurragePaymentDate(?\DateTimeInterface $demurragePaymentDate): void
{
$this->demurragePaymentDate = $demurragePaymentDate;
}
public function getDemurragePaymentDate(): ?string
{
return $this->demurragePaymentDate?->format('Y-m-d');
}
public function setDemurrageClaimDate(?\DateTimeInterface $demurrageClaimDate): void
{
$this->demurrageClaimDate = $demurrageClaimDate;
}
public function getDemurrageClaimDate(): ?string
{
return $this->demurrageClaimDate?->format('Y-m-d');
}
public function getDemurragePaidByCharterer(): ?string
{
return $this->demurragePaidByCharterer;
}
public function setDemurragePaidByCharterer(?string $demurragePaidByCharterer): void
{
$this->demurragePaidByCharterer = $demurragePaidByCharterer;
}
public function getDemurragePaidByChartererCurrency(): ?string
{
return $this->demurragePaidByChartererCurrency;
}
public function setDemurragePaidByChartererCurrency(?string $demurragePaidByChartererCurrency): void
{
$this->demurragePaidByChartererCurrency = $demurragePaidByChartererCurrency;
}
public function getFinalDemurrageCost(): ?string
{
return $this->finalDemurrageCost;
}
public function setFinalDemurrageCost(?string $finalDemurrageCost): void
{
$this->finalDemurrageCost = $finalDemurrageCost;
}
public function getFinalDemurrageCostCurrency(): ?string
{
return $this->finalDemurrageCostCurrency;
}
public function setFinalDemurrageCostCurrency(?string $finalDemurrageCostCurrency): void
{
$this->finalDemurrageCostCurrency = $finalDemurrageCostCurrency;
}
public function getEtaArrival(): ?\DateTimeInterface
{
return $this->etaArrival;
}
public function getEtaArrivalDate(): ?string
{
return $this->etaArrival ? $this->etaArrival->format('Y-m-d') : null;
}
public function getEtaArrivalTime(): ?string
{
return $this->etaArrival ? $this->etaArrival->format('H:i') : null;
}
public function setEtaArrival(?\DateTimeInterface $etaArrival): void
{
$this->etaArrival = $etaArrival;
}
public function getRedeliveryEtaArrival(): ?\DateTimeInterface
{
return $this->redeliveryEtaArrival;
}
public function getRedeliveryEtaArrivalDate(): ?string
{
return $this->redeliveryEtaArrival ? $this->redeliveryEtaArrival->format('Y-m-d') : null;
}
public function getRedeliveryEtaArrivalTime(): ?string
{
return $this->redeliveryEtaArrival ? $this->redeliveryEtaArrival->format('H:i') : null;
}
public function setRedeliveryEtaArrival(?\DateTimeInterface $redeliveryEtaArrival): void
{
$this->redeliveryEtaArrival = $redeliveryEtaArrival;
}
public function getDeliveryAproxNotice1(): ?int
{
return $this->deliveryAproxNotice1;
}
public function setDeliveryAproxNotice1(?int $deliveryAproxNotice1): void
{
$this->deliveryAproxNotice1 = $deliveryAproxNotice1;
}
public function getDeliveryAproxNotice2(): ?int
{
return $this->deliveryAproxNotice2;
}
public function setDeliveryAproxNotice2(?int $deliveryAproxNotice2): void
{
$this->deliveryAproxNotice2 = $deliveryAproxNotice2;
}
public function getDeliveryAproxNotice3(): ?int
{
return $this->deliveryAproxNotice3;
}
public function setDeliveryAproxNotice3(?int $deliveryAproxNotice3): void
{
$this->deliveryAproxNotice3 = $deliveryAproxNotice3;
}
public function getDeliveryAproxNotice4(): ?int
{
return $this->deliveryAproxNotice4;
}
public function setDeliveryAproxNotice4(?int $deliveryAproxNotice4): void
{
$this->deliveryAproxNotice4 = $deliveryAproxNotice4;
}
public function getDeliveryAproxNotice5(): ?int
{
return $this->deliveryAproxNotice5;
}
public function setDeliveryAproxNotice5(?int $deliveryAproxNotice5): void
{
$this->deliveryAproxNotice5 = $deliveryAproxNotice5;
}
public function getDeliveryAproxNotice6(): ?int
{
return $this->deliveryAproxNotice6;
}
public function setDeliveryAproxNotice6(?int $deliveryAproxNotice6): void
{
$this->deliveryAproxNotice6 = $deliveryAproxNotice6;
}
public function getDeliveryAproxNotice7(): ?int
{
return $this->deliveryAproxNotice7;
}
public function setDeliveryAproxNotice7(?int $deliveryAproxNotice7): void
{
$this->deliveryAproxNotice7 = $deliveryAproxNotice7;
}
public function getDeliveryFirmNotice1(): ?int
{
return $this->deliveryFirmNotice1;
}
public function setDeliveryFirmNotice1(?int $deliveryFirmNotice1): void
{
$this->deliveryFirmNotice1 = $deliveryFirmNotice1;
}
public function getDeliveryFirmNotice2(): ?int
{
return $this->deliveryFirmNotice2;
}
public function setDeliveryFirmNotice2(?int $deliveryFirmNotice2): void
{
$this->deliveryFirmNotice2 = $deliveryFirmNotice2;
}
public function getDeliveryFirmNotice3(): ?int
{
return $this->deliveryFirmNotice3;
}
public function setDeliveryFirmNotice3(?int $deliveryFirmNotice3): void
{
$this->deliveryFirmNotice3 = $deliveryFirmNotice3;
}
public function getDeliveryFirmNotice4(): ?int
{
return $this->deliveryFirmNotice4;
}
public function setDeliveryFirmNotice4(?int $deliveryFirmNotice4): void
{
$this->deliveryFirmNotice4 = $deliveryFirmNotice4;
}
public function getDeliveryFirmNotice5(): ?int
{
return $this->deliveryFirmNotice5;
}
public function setDeliveryFirmNotice5(?int $deliveryFirmNotice5): void
{
$this->deliveryFirmNotice5 = $deliveryFirmNotice5;
}
public function getDeliveryFirmNotice6(): ?int
{
return $this->deliveryFirmNotice6;
}
public function setDeliveryFirmNotice6(?int $deliveryFirmNotice6): void
{
$this->deliveryFirmNotice6 = $deliveryFirmNotice6;
}
public function getDeliveryFirmNotice7(): ?int
{
return $this->deliveryFirmNotice7;
}
public function setDeliveryFirmNotice7(?int $deliveryFirmNotice7): void
{
$this->deliveryFirmNotice7 = $deliveryFirmNotice7;
}
public function getRedeliveryAproxNotice1(): ?int
{
return $this->redeliveryAproxNotice1;
}
public function setRedeliveryAproxNotice1(?int $redeliveryAproxNotice1): void
{
$this->redeliveryAproxNotice1 = $redeliveryAproxNotice1;
}
public function getRedeliveryAproxNotice2(): ?int
{
return $this->redeliveryAproxNotice2;
}
public function setRedeliveryAproxNotice2(?int $redeliveryAproxNotice2): void
{
$this->redeliveryAproxNotice2 = $redeliveryAproxNotice2;
}
public function getRedeliveryAproxNotice3(): ?int
{
return $this->redeliveryAproxNotice3;
}
public function setRedeliveryAproxNotice3(?int $redeliveryAproxNotice3): void
{
$this->redeliveryAproxNotice3 = $redeliveryAproxNotice3;
}
public function getRedeliveryAproxNotice4(): ?int
{
return $this->redeliveryAproxNotice4;
}
public function setRedeliveryAproxNotice4(?int $redeliveryAproxNotice4): void
{
$this->redeliveryAproxNotice4 = $redeliveryAproxNotice4;
}
public function getRedeliveryAproxNotice5(): ?int
{
return $this->redeliveryAproxNotice5;
}
public function setRedeliveryAproxNotice5(?int $redeliveryAproxNotice5): void
{
$this->redeliveryAproxNotice5 = $redeliveryAproxNotice5;
}
public function getRedeliveryAproxNotice6(): ?int
{
return $this->redeliveryAproxNotice6;
}
public function setRedeliveryAproxNotice6(?int $redeliveryAproxNotice6): void
{
$this->redeliveryAproxNotice6 = $redeliveryAproxNotice6;
}
public function getRedeliveryAproxNotice7(): ?int
{
return $this->redeliveryAproxNotice7;
}
public function setRedeliveryAproxNotice7(?int $redeliveryAproxNotice7): void
{
$this->redeliveryAproxNotice7 = $redeliveryAproxNotice7;
}
public function getRedeliveryFirmNotice1(): ?int
{
return $this->redeliveryFirmNotice1;
}
public function setRedeliveryFirmNotice1(?int $redeliveryFirmNotice1): void
{
$this->redeliveryFirmNotice1 = $redeliveryFirmNotice1;
}
public function getRedeliveryFirmNotice2(): ?int
{
return $this->redeliveryFirmNotice2;
}
public function setRedeliveryFirmNotice2(?int $redeliveryFirmNotice2): void
{
$this->redeliveryFirmNotice2 = $redeliveryFirmNotice2;
}
public function getRedeliveryFirmNotice3(): ?int
{
return $this->redeliveryFirmNotice3;
}
public function setRedeliveryFirmNotice3(?int $redeliveryFirmNotice3): void
{
$this->redeliveryFirmNotice3 = $redeliveryFirmNotice3;
}
public function getRedeliveryFirmNotice4(): ?int
{
return $this->redeliveryFirmNotice4;
}
public function setRedeliveryFirmNotice4(?int $redeliveryFirmNotice4): void
{
$this->redeliveryFirmNotice4 = $redeliveryFirmNotice4;
}
public function getRedeliveryFirmNotice5(): ?int
{
return $this->redeliveryFirmNotice5;
}
public function setRedeliveryFirmNotice5(?int $redeliveryFirmNotice5): void
{
$this->redeliveryFirmNotice5 = $redeliveryFirmNotice5;
}
public function getRedeliveryFirmNotice6(): ?int
{
return $this->redeliveryFirmNotice6;
}
public function setRedeliveryFirmNotice6(?int $redeliveryFirmNotice6): void
{
$this->redeliveryFirmNotice6 = $redeliveryFirmNotice6;
}
public function getRedeliveryFirmNotice7(): ?int
{
return $this->redeliveryFirmNotice7;
}
public function setRedeliveryFirmNotice7(?int $redeliveryFirmNotice7): void
{
$this->redeliveryFirmNotice7 = $redeliveryFirmNotice7;
}
public function getDeliveryNoticesNotAplicable(): ?bool
{
return $this->deliveryNoticesNotAplicable ?? false;
}
public function setDeliveryNoticesNotAplicable(?bool $deliveryNoticesNotAplicable): void
{
$this->deliveryNoticesNotAplicable = $deliveryNoticesNotAplicable;
}
public function getRedeliveryNoticesNotAplicable(): ?bool
{
return $this->redeliveryNoticesNotAplicable ?? false;
}
public function setRedeliveryNoticesNotAplicable(?bool $redeliveryNoticesNotAplicable): void
{
$this->redeliveryNoticesNotAplicable = $redeliveryNoticesNotAplicable;
}
public function getShipDelivered(): ?bool
{
return $this->shipDelivered ?? false;
}
public function setShipDelivered(?bool $shipDelivered): void
{
$this->shipDelivered = $shipDelivered;
}
public function getShipRedelivered(): ?bool
{
return $this->shipRedelivered ?? false;
}
public function setShipRedelivered(?bool $shipRedelivered): void
{
$this->shipRedelivered = $shipRedelivered;
}
public function getDeliveryPort1(): ?Port
{
return $this->deliveryPort1;
}
public function setDeliveryPort1(?Port $deliveryPort1): void
{
$this->deliveryPort1 = $deliveryPort1;
}
public function getDeliveryPort2(): ?Port
{
return $this->deliveryPort2;
}
public function setDeliveryPort2(?Port $deliveryPort2): void
{
$this->deliveryPort2 = $deliveryPort2;
}
public function getRedeliveryPort1(): ?Port
{
return $this->redeliveryPort1;
}
public function setRedeliveryPort1(?Port $redeliveryPort1): void
{
$this->redeliveryPort1 = $redeliveryPort1;
}
public function getRedeliveryPort2(): ?Port
{
return $this->redeliveryPort2;
}
public function setRedeliveryPort2(?Port $redeliveryPort2): void
{
$this->redeliveryPort2 = $redeliveryPort2;
}
public function getHirePerDay(): ?string
{
return $this->hirePerDay;
}
public function setHirePerDay(?string $hirePerDay): void
{
$this->hirePerDay = $hirePerDay;
}
public function getHirePerDayCurrency(): ?string
{
return $this->hirePerDayCurrency;
}
public function setHirePerDayCurrency(?string $hirePerDayCurrency): void
{
$this->hirePerDayCurrency = $hirePerDayCurrency;
}
public function getPeriod(): ?float
{
return $this->period;
}
public function setPeriod(?float $period): void
{
$this->period = $period;
}
public function addDeliveryNotice(DeliveryNotice $deliveryNotice): void
{
$deliveryNotice->setContract($this);
$this->deliveryNotices[] = $deliveryNotice;
}
public function removeDeliveryNotice(DeliveryNotice $deliveryNotice): void
{
$this->deliveryNotices->removeElement($deliveryNotice);
}
public function getDeliveryNotices(): ?Collection
{
return $this->deliveryNotices;
}
public function addRedeliveryNotice(RedeliveryNotice $redeliveryNotice): void
{
$redeliveryNotice->setContract($this);
$this->redeliveryNotices[] = $redeliveryNotice;
}
public function removeRedeliveryNotice(RedeliveryNotice $redeliveryNotice): void
{
$this->redeliveryNotices->removeElement($redeliveryNotice);
}
public function getRedeliveryNotices(): ?Collection
{
return $this->redeliveryNotices;
}
public function setContractCoa(?Contract $contract): void
{
$this->contractCoa = $contract;
}
public function getContractCoa(): ?Contract
{
return $this->contractCoa;
}
public function getLoadPortsResume(): ?string
{
$portCalls = array_filter($this->getPortCalls()->toArray(), function($pc) {
return $pc->getPortCallType() === PortCall::PORT_CALL_TYPE_LOAD;
});
$portCount = count($portCalls);
if ($portCount === 0) {
return null;
}
$portCall = reset($portCalls);
$portName = $portCall ? $portCall->getPort()->getPortName() : '';
$portSuffix = $portCount > 1 ? ' (+)' : '';
return $portName . $portSuffix;
}
public function getDischargePortsResume(): ?string
{
$portCalls = array_filter($this->getPortCalls()->toArray(), function($pc) {
return $pc->getPortCallType() === PortCall::PORT_CALL_TYPE_DISCHARGE;
});
$portCount = count($portCalls);
if ($portCount === 0) {
return null;
}
$portCall = reset($portCalls);
$portName = $portCall ? $portCall->getPort()->getPortName() : '';
$portSuffix = $portCount > 1 ? ' (+)' : '';
return $portName . $portSuffix;
}
public function getCargoResume(): ?string
{
$cargoCount = $this->getCargoItems()->count();
if ($cargoCount === 0) {
return null;
}
$cargoItems = $this->getCargoItems();
$cargoItem = $cargoItems->first();
if (!$cargoItem instanceof ContractCargo) {
return null;
}
$cargoName = $cargoItem->getCargo()->getName();
$cargoSuffix = $cargoCount > 1 ? ' (+)' : '';
return $cargoName . $cargoSuffix;
}
public function getCargoVolumeM3(): ?string
{
$totalVolume = 0.0;
foreach ($this->getCargoItems() as $cargoItem) {
// $totalVolume += (float) $cargoItem->getQuantityM3();
$totalVolume += (float) str_replace(',', '.', str_replace('.', '', $cargoItem->getQuantityM3() ?? ''));
}
// return number_format($totalVolume, 3, '.', '');
return $totalVolume ? str_replace(',00', '', number_format($totalVolume, 2, ',', '.')) : null;
}
public function getCargoVolumeMT(): ?string
{
$totalVolume = 0.0;
foreach ($this->getCargoItems() as $cargoItem) {
// $totalVolume += (float) $cargoItem->getQuantityMT();
$totalVolume += (float) str_replace(',', '.', str_replace('.', '', $cargoItem->getQuantityMT() ?? ''));
}
// return number_format($totalVolume, 3, '.', '');
return $totalVolume ? str_replace(',00', '', number_format($totalVolume, 2, ',', '.')) : null;
}
public function getTotalAmount(): ?string
{
$totalAmount = 0.0;
if ($this->getContractType() === self::CONTRACT_TYPE_SPOT) {
foreach ($this->getPayments() as $invoice) {
$amount = (float) str_replace('.', '', $invoice->getAmount() ?? '');
$totalAmount += $amount;
}
return number_format($totalAmount, 2, ',', '.');
} elseif ($this->getContractType() === self::CONTRACT_TYPE_TIME_CHARTER) {
foreach ($this->getHires() as $hire) {
$amount = (float) str_replace('.', '', $hire->getTotalInvoice() ?? '');
$totalAmount += $amount;
}
return number_format($totalAmount, 2, ',', '.');
} else {
return null;
}
}
public function getTotalAmountCurrency(): ?string
{
if ($this->getContractType() === self::CONTRACT_TYPE_SPOT && $this->getPayments()->count() > 0) {
return $this->getPayments()->first()->getAmountCurrency() ?? '';
} elseif ($this->getContractType() === self::CONTRACT_TYPE_TIME_CHARTER && $this->getHires()->count() > 0) {
return $this->getHires()->first()->getTotalInvoiceCurrency() ?? '';
} else {
return null;
}
}
public function getDemurrageDeadline(): ?\DateTimeInterface {
if (!$this->demurrageDeadline) {
$dischargePortCalls = array_filter($this->getPortCalls()->toArray(), function($pc) {
return $pc->getPortCallType() === PortCall::PORT_CALL_TYPE_DISCHARGE;
});
$dischargePortCallWithLaterDeparture = array_reduce($dischargePortCalls, function($prev, $curr) {
if (!$prev || ($curr->getDeparture() && $curr->getDeparture() > $prev->getDeparture())) {
return $curr;
}
return $prev;
}, null);
if (!$dischargePortCallWithLaterDeparture || !$dischargePortCallWithLaterDeparture->getDeparture()) {
$this->demurrageDeadline = null;
} else {
// $baseDate = new \DateTime($dischargePortCallWithLaterDeparture->getDeparture());
$baseDate = $dischargePortCallWithLaterDeparture->getDeparture();
if ($baseDate->getTimestamp() === false) {
$this->demurrageDeadline = null;
} else {
// Normalize time to noon to avoid day changes due to timezone
$baseDate->setTime(12, 0, 0);
$days = $this->getDemurrageTimeBar() ?? 0;
$baseDate->modify('+' . $days . ' days');
$this->demurrageDeadline = $baseDate;
}
}
}
return $this->demurrageDeadline;
}
public function getDemurrageDaysLeft(): ?int {
$demurrageDeadline = $this->getDemurrageDeadline();
if (!$demurrageDeadline) {
return null;
}
$now = new \DateTime();
$daysLeft = (int) ceil(($demurrageDeadline->getTimestamp() - $now->getTimestamp()) / (60 * 60 * 24));
return $daysLeft < 0 ? null : $daysLeft;
}
public function setFreightInvoiceStatus(?string $freightInvoiceStatus): void
{
$this->freightInvoiceStatus = $freightInvoiceStatus;
}
public function getFreightInvoiceStatus(): ?string
{
return $this->freightInvoiceStatus;
}
public function setFreightInvoiceNumber(?string $freightInvoiceNumber): void
{
$this->freightInvoiceNumber = $freightInvoiceNumber;
}
public function getFreightInvoiceNumber(): ?string
{
return $this->freightInvoiceNumber;
}
public function setFreightInvoiceOwnerNumber(?string $freightInvoiceOwnerNumber): void
{
$this->freightInvoiceOwnerNumber = $freightInvoiceOwnerNumber;
}
public function getFreightInvoiceOwnerNumber(): ?string
{
return $this->freightInvoiceOwnerNumber;
}
public function getFreightInvoiceTaxAction(): ?bool
{
return $this->freightInvoiceTaxAction ?? false;
}
public function setFreightInvoiceTaxAction(?bool $freightInvoiceTaxAction): void
{
$this->freightInvoiceTaxAction = $freightInvoiceTaxAction;
}
public function getFreightInvoiceFreightOrHire(): ?string
{
if ($this->getContractType() === self::CONTRACT_TYPE_TIME_CHARTER) {
return $this->getHirePerDay();
} else {
return $this->getFreightCost();
}
}
public function getFreightInvoiceFreightOrHireCurrency(): ?string
{
if ($this->getContractType() === self::CONTRACT_TYPE_TIME_CHARTER) {
return $this->getHirePerDayCurrency();
} else {
return $this->getFreightCostCurrency();
}
}
public function getFreightInvoiceAdditionalCost(): ?string
{
if (!$this->freightInvoiceAdditionalCost) {
$additionalCosts = $this->getAdditionalCosts();
if ($additionalCosts === null) {
return null;
}
$total = 0;
foreach ($additionalCosts as $additionalCost) {
if ($additionalCost->getAdditionalCost() !== null) {
$total += (float) str_replace(',', '.', str_replace('.', '', $additionalCost->getAdditionalCost()));
}
}
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
return $this->freightInvoiceAdditionalCost;
}
public function setFreightInvoiceAdditionalCost(?string $freightInvoiceAdditionalCost): void
{
$this->freightInvoiceAdditionalCost = $freightInvoiceAdditionalCost;
}
public function getFreightInvoiceAdditionalCostCurrency(): ?string
{
if (!$this->freightInvoiceAdditionalCostCurrency) {
$additionalCosts = $this->getAdditionalCosts();
if ($additionalCosts === null) {
return null;
}
if ($additionalCosts->count() > 0) {
return $additionalCosts->first()->getAdditionalCostCurrency();
}
return null;
}
return $this->freightInvoiceAdditionalCostCurrency;
}
public function setFreightInvoiceAdditionalCostCurrency(?string $freightInvoiceAdditionalCostCurrency): void
{
$this->freightInvoiceAdditionalCostCurrency = $freightInvoiceAdditionalCostCurrency;
}
public function getFreightInvoiceTotalFreightOrHire(): ?string // TODO: review mathematical formula
{
// if (!$this->freightInvoiceTotalFreightOrHire) {
$freightOrHire = $this->getFreightInvoiceFreightOrHire();
if (!$freightOrHire) {
return null;
}
$freightOrHire = (float) str_replace(',', '.', str_replace('.', '', $freightOrHire));
$additionalCost = $this->getFreightInvoiceAdditionalCost();
$additionalCost = $additionalCost ? (float) str_replace(',', '.', str_replace('.', '', $additionalCost)) : 0;
$total = 0;
if ($this->getFreightType() === self::COST_TYPE_LUMPSUM) {
$total = $freightOrHire + $additionalCost;
} elseif ($this->getFreightType() === self::COST_TYPE_PMT) {
// o valor da coluna “Freight/hire” será multiplicado pela quantidade de carga e somar o custo adicional, se aplicável.
$cargoVolumeMT = $this->getCargoVolumeMT();
$cargoVolumeMT = (float) str_replace(',', '.', str_replace('.', '', $cargoVolumeMT ?? ''));
$total = $freightOrHire * $cargoVolumeMT + $additionalCost;
} elseif ($this->getFreightType() === self::COST_TYPE_WS) {
// o valor da coluna “Freight/hire” será multiplicado pela coluna “TC days” e somar o custo adicional, se aplicável.
$totalHirePeriod = $this->getPeriod();
$total = $freightOrHire * $totalHirePeriod + $additionalCost;
} else {
// TC
$totalHirePeriod = $this->getPeriod();
$total = $freightOrHire * $totalHirePeriod + $additionalCost;
}
return $total === 0 ? null : number_format($total, 2, ',', '.');
// }
// return $this->freightInvoiceTotalFreightOrHire;
}
// public function setFreightInvoiceTotalFreightOrHire(?string $freightInvoiceTotalFreightOrHire): void
// {
// $this->freightInvoiceTotalFreightOrHire = $freightInvoiceTotalFreightOrHire;
// }
public function getFreightInvoiceTotalFreightOrHireCurrency(): ?string
{
// if (!$this->freightInvoiceTotalFreightOrHireCurrency) {
return $this->getFreightInvoiceFreightOrHireCurrency();
// }
// return $this->freightInvoiceTotalFreightOrHireCurrency;
}
// public function setFreightInvoiceTotalFreightOrHireCurrency(?string $freightInvoiceTotalFreightOrHireCurrency): void
// {
// $this->freightInvoiceTotalFreightOrHireCurrency = $freightInvoiceTotalFreightOrHireCurrency;
// }
public function getFreightInvoiceTotalCommission(): ?string
{
/*
valor da coluna “totalFreight/hire” multiplicado pela porcentagem da comissão.
*/
$total = $this->getFreightInvoiceTotalFreightOrHire();
$brokerageCommission = $this->getBrokerageCommission();
if (!$total || !$brokerageCommission) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
// $total = $total * (((float) $brokerageCommission) / 100);
$total = $total * (((float) str_replace(',', '.', str_replace('.', '', $brokerageCommission))) / 100);
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
public function getFreightInvoiceTotalCommissionCurrency(): ?string
{
return $this->getFreightInvoiceTotalFreightOrHireCurrency();
}
public function setFreightInvoiceTotalCommissionCurrency(?string $freightInvoiceTotalCommissionCurrency): void
{
$this->freightInvoiceTotalCommissionCurrency = $freightInvoiceTotalCommissionCurrency;
}
public function setFreightInvoiceCabotagePtax(?string $freightInvoiceCabotagePtax): void
{
$this->freightInvoiceCabotagePtax = $freightInvoiceCabotagePtax;
}
public function getFreightInvoiceCabotagePtax(): ?string
{
return $this->freightInvoiceCabotagePtax;
}
public function getFreightInvoiceCabotageTotalFreight(): ?string
{
/*
valor da coluna “total Freight/hire” multiplicado pela PTAX
*/
$total = $this->getFreightInvoiceTotalFreightOrHire();
$ptax = $this->getFreightInvoiceCabotagePtax();
if (!$total || !$ptax) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
$total = $total * ((float) str_replace(',', '.', str_replace('.', '', $ptax)));
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
public function getFreightInvoiceCabotageTotalFreightCurrency(): ?string
{
// return $this->getFreightInvoiceTotalFreightOrHireCurrency();
return $this->freightInvoiceCabotageTotalFreightCurrency;
}
public function getFreightInvoiceCabotageTotalCommission(): ?string
{
// if (!$this->freightInvoiceCabotageTotalCommission) {
/*
valor da coluna “total commission” multiplicado pela PTAX
*/
$total = $this->getFreightInvoiceTotalCommission();
$ptax = $this->getFreightInvoiceCabotagePtax();
if (!$total || !$ptax) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
$total = $total * ((float) str_replace(',', '.', str_replace('.', '', $ptax)));
return $total === 0 ? null : number_format($total, 2, ',', '.');
// }
// return $this->freightInvoiceCabotageTotalCommission;
}
// public function setFreightInvoiceCabotageTotalCommission(?string $freightInvoiceCabotageTotalCommission): void
// {
// $this->freightInvoiceCabotageTotalCommission = $freightInvoiceCabotageTotalCommission;
// }
public function getFreightInvoiceCabotageTotalCommissionCurrency(): ?string
{
// if (!$this->freightInvoiceCabotageTotalCommissionCurrency) {
// return $this->getFreightInvoiceTotalCommissionCurrency();
// }
return $this->freightInvoiceCabotageTotalCommissionCurrency;
}
// public function setFreightInvoiceCabotageTotalCommissionCurrency(?string $freightInvoiceCabotageTotalCommissionCurrency): void
// {
// $this->freightInvoiceCabotageTotalCommissionCurrency = $freightInvoiceCabotageTotalCommissionCurrency;
// }
public function getFreightInvoiceAmountReceived(): ?string
{
return $this->freightInvoiceAmountReceived;
}
public function setFreightInvoiceAmountReceived(?string $freightInvoiceAmountReceived): void
{
$this->freightInvoiceAmountReceived = $freightInvoiceAmountReceived;
}
public function getFreightInvoiceAmountReceivedCurrency(): ?string
{
return $this->freightInvoiceAmountReceivedCurrency;
}
public function setFreightInvoiceAmountReceivedCurrency(?string $freightInvoiceAmountReceivedCurrency): void
{
$this->freightInvoiceAmountReceivedCurrency = $freightInvoiceAmountReceivedCurrency;
}
public function getFreightInvoiceDifference(): ?string
{
/*
amount received menos “total commission” em USD.
(Nessa ordem, para quando o valor recebido for menor
que o fatura ficar com o valor negativo).
*/
$amountReceived = $this->getFreightInvoiceAmountReceived();
$totalCommission = $this->getFreightInvoiceTotalCommission();
if (!$amountReceived || !$totalCommission) {
return null;
}
$amountReceived = (float) str_replace(',', '.', str_replace('.', '', $amountReceived));
$totalCommission = (float) str_replace(',', '.', str_replace('.', '', $totalCommission));
$total = $amountReceived - $totalCommission;
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
public function getFreightInvoiceDifferenceCurrency(): ?string
{
return $this->getFreightInvoiceAmountReceivedCurrency();
}
public function setFreightInvoicePaymentDate(?\DateTimeInterface $freightInvoicePaymentDate): void
{
$this->freightInvoicePaymentDate = $freightInvoicePaymentDate;
}
public function getFreightInvoicePaymentDate(): ?string
{
return $this->freightInvoicePaymentDate ? $this->freightInvoicePaymentDate->format('Y-m-d') : null;
}
public function setFreightInvoiceDate(?\DateTimeInterface $freightInvoiceDate): void
{
$this->freightInvoiceDate = $freightInvoiceDate;
}
public function getFreightInvoiceDate(): ?string
{
return $this->freightInvoiceDate ? $this->freightInvoiceDate->format('Y-m-d') : null;
}
public function setFreightInvoicePaymentInvoiceDiff(?int $freightInvoicePaymentInvoiceDiff): void
{
$this->freightInvoicePaymentInvoiceDiff = $freightInvoicePaymentInvoiceDiff;
}
public function getFreightInvoicePaymentInvoiceDiff(): ?int
{
if (!$this->freightInvoicePaymentInvoiceDiff) {
/*
data da invoice (coluna “invoice date”) menos data de pagamento (coluna “payment date”)
*/
$payment = $this->getFreightInvoicePaymentDate();
$invoice = $this->getFreightInvoiceDate();
if (!$payment || !$invoice) {
return null;
}
$paymentDate = \DateTime::createFromFormat('Y-m-d', $payment);
$invoiceDate = \DateTime::createFromFormat('Y-m-d', $invoice);
$diff = $invoiceDate->diff($paymentDate);
return $diff->days;
}
return $this->freightInvoicePaymentInvoiceDiff;
}
public function getFreightInvoiceBankInvoiced(): ?string
{
return $this->freightInvoiceBankInvoiced;
}
public function setFreightInvoiceBankInvoiced(?string $freightInvoiceBankInvoiced): void
{
$this->freightInvoiceBankInvoiced = $freightInvoiceBankInvoiced;
}
public function setFreightInvoiceComments(?string $freightInvoiceComments): void
{
$this->freightInvoiceComments = $freightInvoiceComments;
}
public function getFreightInvoiceComments(): ?string
{
return $this->freightInvoiceComments;
}
public function setDemurrageInvoiceStatus(?string $demurrageInvoiceStatus): void
{
$this->demurrageInvoiceStatus = $demurrageInvoiceStatus;
}
public function getDemurrageInvoiceStatus(): ?string
{
return $this->demurrageInvoiceStatus;
}
public function setDemurrageInvoiceNumber(?string $demurrageInvoiceNumber): void
{
$this->demurrageInvoiceNumber = $demurrageInvoiceNumber;
}
public function getDemurrageInvoiceNumber(): ?string
{
return $this->demurrageInvoiceNumber;
}
public function setDemurrageInvoiceOwnerNumber(?string $demurrageInvoiceOwnerNumber): void
{
$this->demurrageInvoiceOwnerNumber = $demurrageInvoiceOwnerNumber;
}
public function getDemurrageInvoiceOwnerNumber(): ?string
{
return $this->demurrageInvoiceOwnerNumber;
}
public function getDemurrageInvoiceTaxAction(): ?bool
{
return $this->demurrageInvoiceTaxAction ?? false;
}
public function setDemurrageInvoiceTaxAction(?bool $demurrageInvoiceTaxAction): void
{
$this->demurrageInvoiceTaxAction = $demurrageInvoiceTaxAction;
}
public function getDemurrageInvoiceTotalCommission(): ?string
{
/*
valor da coluna “totalFreight/hire” multiplicado pela porcentagem da comissão.
*/
$total = $this->getFinalDemurrageCost();
$brokerageCommission = $this->getBrokerageCommission();
if (!$total || !$brokerageCommission) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
$total = $total * (((float) str_replace(',', '.', str_replace('.', '', $brokerageCommission))) / 100);
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
public function getDemurrageInvoiceTotalCommissionCurrency(): ?string
{
return $this->getFinalDemurrageCostCurrency();
}
public function setDemurrageInvoiceCabotagePtax(?string $demurrageInvoiceCabotagePtax): void
{
$this->demurrageInvoiceCabotagePtax = $demurrageInvoiceCabotagePtax;
}
public function getDemurrageInvoiceCabotagePtax(): ?string
{
return $this->demurrageInvoiceCabotagePtax;
}
public function getDemurrageInvoiceCabotageTotalDemurrage(): ?string
{
// if (!$this->demurrageInvoiceCabotageTotalDemurrage) {
// $this->setDemurrageInvoiceCabotageTotalDemurrageCurrency('USD');
/*
valor da coluna “total demurrage” multiplicado pela PTAX
*/
$total = $this->getFinalDemurrageCost();
$ptax = $this->getDemurrageInvoiceCabotagePtax();
if (!$total || !$ptax) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
$total = $total * ((float) str_replace(',', '.', str_replace('.', '', $ptax)));
return $total === 0 ? null : number_format($total, 2, ',', '.');
// }
// return $this->demurrageInvoiceCabotageTotalDemurrage;
}
// public function setDemurrageInvoiceCabotageTotalDemurrage(?string $demurrageInvoiceCabotageTotalDemurrage): void
// {
// $this->demurrageInvoiceCabotageTotalDemurrage = $demurrageInvoiceCabotageTotalDemurrage;
// }
public function getDemurrageInvoiceCabotageTotalDemurrageCurrency(): ?string
{
// return $this->demurrageInvoiceCabotageTotalDemurrageCurrency;
// if (!$this->demurrageInvoiceCabotageTotalDemurrageCurrency) {
// return $this->getFinalDemurrageCostCurrency();
// }
return $this->demurrageInvoiceCabotageTotalDemurrageCurrency;
}
// public function setDemurrageInvoiceCabotageTotalDemurrageCurrency(?string $demurrageInvoiceCabotageTotalDemurrageCurrency): void
// {
// $this->demurrageInvoiceCabotageTotalDemurrageCurrency = $demurrageInvoiceCabotageTotalDemurrageCurrency;
// }
public function getDemurrageInvoiceCabotageTotalCommission(): ?string
{
// if (!$this->demurrageInvoiceCabotageTotalCommission) {
/*
valor da coluna “total commission” multiplicado pela PTAX
*/
$total = $this->getDemurrageInvoiceTotalCommission();
$ptax = $this->getDemurrageInvoiceCabotagePtax();
if (!$total || !$ptax) {
return null;
}
$total = (float) str_replace(',', '.', str_replace('.', '', $total));
$total = $total * ((float) str_replace(',', '.', str_replace('.', '', $ptax)));
return $total === 0 ? null : number_format($total, 2, ',', '.');
// }
// return $this->demurrageInvoiceCabotageTotalCommission;
}
// public function setDemurrageInvoiceCabotageTotalCommission(?string $demurrageInvoiceCabotageTotalCommission): void
// {
// $this->demurrageInvoiceCabotageTotalCommission = $demurrageInvoiceCabotageTotalCommission;
// }
public function getDemurrageInvoiceCabotageTotalCommissionCurrency(): ?string
{
// if (!$this->demurrageInvoiceCabotageTotalCommissionCurrency) {
// return $this->getDemurrageInvoiceTotalCommissionCurrency();
// }
return $this->demurrageInvoiceCabotageTotalCommissionCurrency;
}
// public function setDemurrageInvoiceCabotageTotalCommissionCurrency(?string $demurrageInvoiceCabotageTotalCommissionCurrency): void
// {
// $this->demurrageInvoiceCabotageTotalCommissionCurrency = $demurrageInvoiceCabotageTotalCommissionCurrency;
// }
public function getDemurrageInvoiceAmountReceived(): ?string
{
return $this->demurrageInvoiceAmountReceived;
}
public function setDemurrageInvoiceAmountReceived(?string $demurrageInvoiceAmountReceived): void
{
$this->demurrageInvoiceAmountReceived = $demurrageInvoiceAmountReceived;
}
public function getDemurrageInvoiceAmountReceivedCurrency(): ?string
{
return $this->demurrageInvoiceAmountReceivedCurrency;
}
public function setDemurrageInvoiceAmountReceivedCurrency(?string $demurrageInvoiceAmountReceivedCurrency): void
{
$this->demurrageInvoiceAmountReceivedCurrency = $demurrageInvoiceAmountReceivedCurrency;
}
public function getDemurrageInvoiceDifference(): ?string
{
/*
amount received menos “total commission” em USD.
(Nessa ordem, para quando o valor recebido for menor
que o fatura ficar com o valor negativo).
*/
$amountReceived = $this->getDemurrageInvoiceAmountReceived();
$totalCommission = $this->getDemurrageInvoiceTotalCommission();
if (!$amountReceived || !$totalCommission) {
return null;
}
$amountReceived = (float) str_replace(',', '.', str_replace('.', '', $amountReceived));
$totalCommission = (float) str_replace(',', '.', str_replace('.', '', $totalCommission));
$total = $amountReceived - $totalCommission;
return $total === 0 ? null : number_format($total, 2, ',', '.');
}
public function getDemurrageInvoiceDifferenceCurrency(): ?string
{
return $this->getDemurrageInvoiceAmountReceivedCurrency();
}
public function setDemurrageInvoicePaymentDate(?\DateTimeInterface $demurrageInvoicePaymentDate): void
{
$this->demurrageInvoicePaymentDate = $demurrageInvoicePaymentDate;
}
public function getDemurrageInvoicePaymentDate(): ?string
{
return $this->demurrageInvoicePaymentDate ? $this->demurrageInvoicePaymentDate->format('Y-m-d') : null;
}
public function setDemurrageInvoiceDate(?\DateTimeInterface $demurrageInvoiceDate): void
{
$this->demurrageInvoiceDate = $demurrageInvoiceDate;
}
public function getDemurrageInvoiceDate(): ?string
{
return $this->demurrageInvoiceDate ? $this->demurrageInvoiceDate->format('Y-m-d') : null;
}
public function setDemurrageInvoicePaymentInvoiceDiff(?int $demurrageInvoicePaymentInvoiceDiff): void
{
$this->demurrageInvoicePaymentInvoiceDiff = $demurrageInvoicePaymentInvoiceDiff;
}
public function getDemurrageInvoicePaymentInvoiceDiff(): ?int
{
if (!$this->demurrageInvoicePaymentInvoiceDiff) {
/*
data da invoice (coluna “invoice date”) menos data de pagamento (coluna “payment date”)
*/
$payment = $this->getDemurrageInvoicePaymentDate();
$invoice = $this->getDemurrageInvoiceDate();
if (!$payment || !$invoice) {
return null;
}
$paymentDate = \DateTime::createFromFormat('Y-m-d', $payment);
$invoiceDate = \DateTime::createFromFormat('Y-m-d', $invoice);
$diff = $invoiceDate->diff($paymentDate);
return $diff->days;
}
return $this->demurrageInvoicePaymentInvoiceDiff;
}
public function getDemurrageInvoiceBankInvoiced(): ?string
{
return $this->demurrageInvoiceBankInvoiced;
}
public function setDemurrageInvoiceBankInvoiced(?string $demurrageInvoiceBankInvoiced): void
{
$this->demurrageInvoiceBankInvoiced = $demurrageInvoiceBankInvoiced;
}
public function setDemurrageInvoiceComments(?string $demurrageInvoiceComments): void
{
$this->demurrageInvoiceComments = $demurrageInvoiceComments;
}
public function getDemurrageInvoiceComments(): ?string
{
return $this->demurrageInvoiceComments;
}
}