1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 
<?php
/* --------------------------------------------------------------
 GXParcelTrackingCode.inc.php 2018-01-12
 Gambio GmbH
 http://www.gambio.de
 Copyright (c) 2018 Gambio GmbH
 Released under the GNU General Public License (Version 2)
 [http://www.gnu.org/licenses/gpl-2.0.html]
 --------------------------------------------------------------
 */

/**
 * Class GXParcelTrackingCode
 */
class GXParcelTrackingCode
{
    /**
     * @var \ParcelTrackingCodeServiceId
     */
    protected $parcelServiceId;
    
    /**
     * @var \ParcelTrackingCodeOrderId
     */
    protected $orderId;
    
    /**
     * @var \OrderParcelTrackingCode
     */
    protected $trackingCode;
    
    /**
     * @var \ParcelTrackingCodeLanguageId
     */
    protected $languageId;
    
    /**
     * @var bool
     */
    protected $isLightweight;
    
    /**
     * @var \ParcelTrackingCodeServiceName
     */
    protected $name;
    
    /**
     * @var \ParcelTrackingCodeUrl
     */
    protected $url;
    
    /**
     * @var \ParcelTrackingCodeComment
     */
    protected $comment;
    
    
    /**
     * OrderParcelTrackingCode constructor.
     * Private to enforce usage of named constructors.
     */
    private function __construct()
    {
    }
    
    
    /**
     * Creates a new order parcel tracking code entity.
     * This entity version will fetch the corresponding data from related tables.
     *
     * @param \ParcelTrackingCodeServiceId  $parcelServiceId Id of related parcel service.
     * @param \ParcelTrackingCodeOrderId    $orderId         Id of related order.
     * @param \OrderParcelTrackingCode      $trackingCode    Tracking code for order.
     * @param \ParcelTrackingCodeLanguageId $languageId      Language id (for language specific comment).
     *
     * @return GXParcelTrackingCode New instance.
     */
    public static function create(ParcelTrackingCodeServiceId $parcelServiceId,
                                  ParcelTrackingCodeOrderId $orderId,
                                  OrderParcelTrackingCode $trackingCode,
                                  ParcelTrackingCodeLanguageId $languageId)
    {
        $parcelTrackingCode                  = new static();
        $parcelTrackingCode->parcelServiceId = $parcelServiceId;
        $parcelTrackingCode->orderId         = $orderId;
        $parcelTrackingCode->trackingCode    = $trackingCode;
        $parcelTrackingCode->languageId      = $languageId;
        $parcelTrackingCode->isLightweight   = false;
        
        return $parcelTrackingCode;
    }
    
    
    /**
     * Creates a new order parcel tracking code entity.
     * The lightweight version renounce on related data.
     *
     * @param \ParcelTrackingCodeOrderId      $orderId Id of related order.
     * @param \ParcelTrackingCodeServiceName  $name    Name of parcel service-
     * @param \ParcelTrackingCodeUrl          $url     Tracking code url.
     * @param \ParcelTrackingCodeComment|null $comment Comment of tracking code for order.
     *
     * @return GXParcelTrackingCode New instance.
     */
    public static function createLightweight(ParcelTrackingCodeOrderId $orderId,
                                             ParcelTrackingCodeServiceName $name,
                                             ParcelTrackingCodeUrl $url,
                                             ParcelTrackingCodeComment $comment = null)
    {
        $parcelTrackingCode                = new static();
        $parcelTrackingCode->orderId       = $orderId;
        $parcelTrackingCode->name          = $name;
        $parcelTrackingCode->url           = $url;
        $parcelTrackingCode->comment       = $comment;
        $parcelTrackingCode->isLightweight = true;
        
        return $parcelTrackingCode;
    }
    
    
    public function isLightweight()
    {
        return $this->isLightweight;
    }
    
    
    /**
     * Returns the parcels service id.
     *
     * @return \ParcelTrackingCodeServiceId
     */
    public function parcelServiceId()
    {
        return $this->parcelServiceId;
    }
    
    
    /**
     * Returns the order id.
     *
     * @return \ParcelTrackingCodeOrderId
     */
    public function orderId()
    {
        return $this->orderId;
    }
    
    
    /**
     * Returns the tracking code.
     *
     * @return \OrderParcelTrackingCode
     */
    public function trackingCode()
    {
        return $this->trackingCode;
    }
    
    
    /**
     * Returns the language id.
     *
     * @return \ParcelTrackingCodeLanguageId
     */
    public function languageId()
    {
        return $this->languageId;
    }
    
    
    /**
     * Returns the name of the parcel service name.
     *
     * @return \ParcelTrackingCodeServiceName
     */
    public function parcelServiceName()
    {
        return $this->name;
    }
    
    
    /**
     * Returns the tracking code url.
     *
     * @return \ParcelTrackingCodeUrl
     */
    public function url()
    {
        return $this->url;
    }
    
    
    /**
     * Returns the tracking code comment.par
     *
     * @return \ParcelTrackingCodeComment
     */
    public function comment()
    {
        return $this->comment;
    }
}