<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: keyapis/subscription/v1/keyapis_subscription_subscription_v1.proto

namespace Keyapis\Subscription\V1;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * Подписка
 *
 * Generated from protobuf message <code>keyapis.subscription.v1.Subscription</code>
 */
class Subscription extends \Google\Protobuf\Internal\Message
{
    /**
     * Идентификатор.
     * Может быть явно задан при создании.
     * Тип: Guid
     *
     * Generated from protobuf field <code>string id = 1;</code>
     */
    protected $id = '';
    /**
     * ОРПОН.
     * Идентификатор дома
     *
     * Generated from protobuf field <code>int64 orpon = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    protected $orpon = 0;
    /**
     * Номер квартиры
     *
     * Generated from protobuf field <code>string flat_number = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    protected $flat_number = '';
    /**
     * Идентификатор коммерческой возможности(КВ).
     * Заполняется сервером на основе идентификатора из технологического плана(ТП)
     *
     * Generated from protobuf field <code>int32 offer_id = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $offer_id = 0;
    /**
     * Cтатус подписки.
     * При создании может быть: SETUP, ACTIVE
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType status_type = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    protected $status_type = 0;
    /**
     * Предыдущий статус подписки.
     * В справочник входят только финальные статусы.
     * Заполняется сервером при изменении статусов
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType previous_status_type = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $previous_status_type = 0;
    /**
     * Цена
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue price = 7;</code>
     */
    protected $price = null;
    /**
     * Дата создания записи.
     * Заполняется сервером
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp created_at = 8 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $created_at = null;
    /**
     * Дата последнего изменения.
     * Заполняется и обновляется сервером.
     * Заполняется при создании и изменении.
     * Является версией объекта
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp changed_at = 9 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $changed_at = null;
    /**
     * Признак для определения автоподписок.
     * Редактировать флаг запрещено.
     * Проставляется сервером в true при создании через задачу на автоподписку
     *
     * Generated from protobuf field <code>bool is_enable_auto_subscribe = 10 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     */
    protected $is_enable_auto_subscribe = false;
    /**
     * Тип биллинга
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.BillingType billing_type = 11;</code>
     */
    protected $billing_type = 0;
    /**
     * Срок действия.
     * Проставляется при создании
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp expired_at = 12;</code>
     */
    protected $expired_at = null;
    /**
     * Идентификатор подписки, в зависимости от которой подключена данная.
     * Заполняется в подписках на опции.
     * Тип: Guid
     *
     * Generated from protobuf field <code>.google.protobuf.StringValue parent_id = 13;</code>
     */
    protected $parent_id = null;
    /**
     * Аккаунт
     *
     * Generated from protobuf field <code>.google.protobuf.Int64Value account = 14;</code>
     */
    protected $account = null;
    /**
     * Снапшот состояния коммерческой возможности на момент создания подписки.
     * В данный момент это ссылка в базе на запись, в будущем это будет снапшот
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Offer offer = 15;</code>
     */
    protected $offer = null;
    /**
     * Цена по скидки.
     * Заполнена если оплата подписки прошла по скидке, иначе очищается
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue discount_price = 16;</code>
     */
    protected $discount_price = null;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $id
     *           Идентификатор.
     *           Может быть явно задан при создании.
     *           Тип: Guid
     *     @type int|string $orpon
     *           ОРПОН.
     *           Идентификатор дома
     *     @type string $flat_number
     *           Номер квартиры
     *     @type int $offer_id
     *           Идентификатор коммерческой возможности(КВ).
     *           Заполняется сервером на основе идентификатора из технологического плана(ТП)
     *     @type int $status_type
     *           Cтатус подписки.
     *           При создании может быть: SETUP, ACTIVE
     *     @type int $previous_status_type
     *           Предыдущий статус подписки.
     *           В справочник входят только финальные статусы.
     *           Заполняется сервером при изменении статусов
     *     @type \Google\Protobuf\DoubleValue $price
     *           Цена
     *     @type \Google\Protobuf\Timestamp $created_at
     *           Дата создания записи.
     *           Заполняется сервером
     *     @type \Google\Protobuf\Timestamp $changed_at
     *           Дата последнего изменения.
     *           Заполняется и обновляется сервером.
     *           Заполняется при создании и изменении.
     *           Является версией объекта
     *     @type bool $is_enable_auto_subscribe
     *           Признак для определения автоподписок.
     *           Редактировать флаг запрещено.
     *           Проставляется сервером в true при создании через задачу на автоподписку
     *     @type int $billing_type
     *           Тип биллинга
     *     @type \Google\Protobuf\Timestamp $expired_at
     *           Срок действия.
     *           Проставляется при создании
     *     @type \Google\Protobuf\StringValue $parent_id
     *           Идентификатор подписки, в зависимости от которой подключена данная.
     *           Заполняется в подписках на опции.
     *           Тип: Guid
     *     @type \Google\Protobuf\Int64Value $account
     *           Аккаунт
     *     @type \Keyapis\Subscription\V1\Offer $offer
     *           Снапшот состояния коммерческой возможности на момент создания подписки.
     *           В данный момент это ссылка в базе на запись, в будущем это будет снапшот
     *     @type \Google\Protobuf\DoubleValue $discount_price
     *           Цена по скидки.
     *           Заполнена если оплата подписки прошла по скидке, иначе очищается
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Keyapis\Subscription\V1\KeyapisSubscriptionSubscriptionV1::initOnce();
        parent::__construct($data);
    }

    /**
     * Идентификатор.
     * Может быть явно задан при создании.
     * Тип: Guid
     *
     * Generated from protobuf field <code>string id = 1;</code>
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Идентификатор.
     * Может быть явно задан при создании.
     * Тип: Guid
     *
     * Generated from protobuf field <code>string id = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setId($var)
    {
        GPBUtil::checkString($var, True);
        $this->id = $var;

        return $this;
    }

    /**
     * ОРПОН.
     * Идентификатор дома
     *
     * Generated from protobuf field <code>int64 orpon = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return int|string
     */
    public function getOrpon()
    {
        return $this->orpon;
    }

    /**
     * ОРПОН.
     * Идентификатор дома
     *
     * Generated from protobuf field <code>int64 orpon = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @param int|string $var
     * @return $this
     */
    public function setOrpon($var)
    {
        GPBUtil::checkInt64($var);
        $this->orpon = $var;

        return $this;
    }

    /**
     * Номер квартиры
     *
     * Generated from protobuf field <code>string flat_number = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return string
     */
    public function getFlatNumber()
    {
        return $this->flat_number;
    }

    /**
     * Номер квартиры
     *
     * Generated from protobuf field <code>string flat_number = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @param string $var
     * @return $this
     */
    public function setFlatNumber($var)
    {
        GPBUtil::checkString($var, True);
        $this->flat_number = $var;

        return $this;
    }

    /**
     * Идентификатор коммерческой возможности(КВ).
     * Заполняется сервером на основе идентификатора из технологического плана(ТП)
     *
     * Generated from protobuf field <code>int32 offer_id = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return int
     */
    public function getOfferId()
    {
        return $this->offer_id;
    }

    /**
     * Идентификатор коммерческой возможности(КВ).
     * Заполняется сервером на основе идентификатора из технологического плана(ТП)
     *
     * Generated from protobuf field <code>int32 offer_id = 4 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param int $var
     * @return $this
     */
    public function setOfferId($var)
    {
        GPBUtil::checkInt32($var);
        $this->offer_id = $var;

        return $this;
    }

    /**
     * Cтатус подписки.
     * При создании может быть: SETUP, ACTIVE
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType status_type = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return int
     */
    public function getStatusType()
    {
        return $this->status_type;
    }

    /**
     * Cтатус подписки.
     * При создании может быть: SETUP, ACTIVE
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType status_type = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @param int $var
     * @return $this
     */
    public function setStatusType($var)
    {
        GPBUtil::checkEnum($var, \Keyapis\Subscription\V1\Subscription\StatusType::class);
        $this->status_type = $var;

        return $this;
    }

    /**
     * Предыдущий статус подписки.
     * В справочник входят только финальные статусы.
     * Заполняется сервером при изменении статусов
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType previous_status_type = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return int
     */
    public function getPreviousStatusType()
    {
        return $this->previous_status_type;
    }

    /**
     * Предыдущий статус подписки.
     * В справочник входят только финальные статусы.
     * Заполняется сервером при изменении статусов
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.StatusType previous_status_type = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param int $var
     * @return $this
     */
    public function setPreviousStatusType($var)
    {
        GPBUtil::checkEnum($var, \Keyapis\Subscription\V1\Subscription\StatusType::class);
        $this->previous_status_type = $var;

        return $this;
    }

    /**
     * Цена
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue price = 7;</code>
     * @return \Google\Protobuf\DoubleValue|null
     */
    public function getPrice()
    {
        return $this->price;
    }

    public function hasPrice()
    {
        return isset($this->price);
    }

    public function clearPrice()
    {
        unset($this->price);
    }

    /**
     * Returns the unboxed value from <code>getPrice()</code>

     * Цена
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue price = 7;</code>
     * @return float|null
     */
    public function getPriceUnwrapped()
    {
        return $this->readWrapperValue("price");
    }

    /**
     * Цена
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue price = 7;</code>
     * @param \Google\Protobuf\DoubleValue $var
     * @return $this
     */
    public function setPrice($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
        $this->price = $var;

        return $this;
    }

    /**
     * Sets the field by wrapping a primitive type in a Google\Protobuf\DoubleValue object.

     * Цена
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue price = 7;</code>
     * @param float|null $var
     * @return $this
     */
    public function setPriceUnwrapped($var)
    {
        $this->writeWrapperValue("price", $var);
        return $this;}

    /**
     * Дата создания записи.
     * Заполняется сервером
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp created_at = 8 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getCreatedAt()
    {
        return $this->created_at;
    }

    public function hasCreatedAt()
    {
        return isset($this->created_at);
    }

    public function clearCreatedAt()
    {
        unset($this->created_at);
    }

    /**
     * Дата создания записи.
     * Заполняется сервером
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp created_at = 8 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setCreatedAt($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->created_at = $var;

        return $this;
    }

    /**
     * Дата последнего изменения.
     * Заполняется и обновляется сервером.
     * Заполняется при создании и изменении.
     * Является версией объекта
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp changed_at = 9 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getChangedAt()
    {
        return $this->changed_at;
    }

    public function hasChangedAt()
    {
        return isset($this->changed_at);
    }

    public function clearChangedAt()
    {
        unset($this->changed_at);
    }

    /**
     * Дата последнего изменения.
     * Заполняется и обновляется сервером.
     * Заполняется при создании и изменении.
     * Является версией объекта
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp changed_at = 9 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setChangedAt($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->changed_at = $var;

        return $this;
    }

    /**
     * Признак для определения автоподписок.
     * Редактировать флаг запрещено.
     * Проставляется сервером в true при создании через задачу на автоподписку
     *
     * Generated from protobuf field <code>bool is_enable_auto_subscribe = 10 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @return bool
     */
    public function getIsEnableAutoSubscribe()
    {
        return $this->is_enable_auto_subscribe;
    }

    /**
     * Признак для определения автоподписок.
     * Редактировать флаг запрещено.
     * Проставляется сервером в true при создании через задачу на автоподписку
     *
     * Generated from protobuf field <code>bool is_enable_auto_subscribe = 10 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
     * @param bool $var
     * @return $this
     */
    public function setIsEnableAutoSubscribe($var)
    {
        GPBUtil::checkBool($var);
        $this->is_enable_auto_subscribe = $var;

        return $this;
    }

    /**
     * Тип биллинга
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.BillingType billing_type = 11;</code>
     * @return int
     */
    public function getBillingType()
    {
        return $this->billing_type;
    }

    /**
     * Тип биллинга
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Subscription.BillingType billing_type = 11;</code>
     * @param int $var
     * @return $this
     */
    public function setBillingType($var)
    {
        GPBUtil::checkEnum($var, \Keyapis\Subscription\V1\Subscription\BillingType::class);
        $this->billing_type = $var;

        return $this;
    }

    /**
     * Срок действия.
     * Проставляется при создании
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp expired_at = 12;</code>
     * @return \Google\Protobuf\Timestamp|null
     */
    public function getExpiredAt()
    {
        return $this->expired_at;
    }

    public function hasExpiredAt()
    {
        return isset($this->expired_at);
    }

    public function clearExpiredAt()
    {
        unset($this->expired_at);
    }

    /**
     * Срок действия.
     * Проставляется при создании
     *
     * Generated from protobuf field <code>.google.protobuf.Timestamp expired_at = 12;</code>
     * @param \Google\Protobuf\Timestamp $var
     * @return $this
     */
    public function setExpiredAt($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class);
        $this->expired_at = $var;

        return $this;
    }

    /**
     * Идентификатор подписки, в зависимости от которой подключена данная.
     * Заполняется в подписках на опции.
     * Тип: Guid
     *
     * Generated from protobuf field <code>.google.protobuf.StringValue parent_id = 13;</code>
     * @return \Google\Protobuf\StringValue|null
     */
    public function getParentId()
    {
        return $this->parent_id;
    }

    public function hasParentId()
    {
        return isset($this->parent_id);
    }

    public function clearParentId()
    {
        unset($this->parent_id);
    }

    /**
     * Returns the unboxed value from <code>getParentId()</code>

     * Идентификатор подписки, в зависимости от которой подключена данная.
     * Заполняется в подписках на опции.
     * Тип: Guid
     *
     * Generated from protobuf field <code>.google.protobuf.StringValue parent_id = 13;</code>
     * @return string|null
     */
    public function getParentIdUnwrapped()
    {
        return $this->readWrapperValue("parent_id");
    }

    /**
     * Идентификатор подписки, в зависимости от которой подключена данная.
     * Заполняется в подписках на опции.
     * Тип: Guid
     *
     * Generated from protobuf field <code>.google.protobuf.StringValue parent_id = 13;</code>
     * @param \Google\Protobuf\StringValue $var
     * @return $this
     */
    public function setParentId($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
        $this->parent_id = $var;

        return $this;
    }

    /**
     * Sets the field by wrapping a primitive type in a Google\Protobuf\StringValue object.

     * Идентификатор подписки, в зависимости от которой подключена данная.
     * Заполняется в подписках на опции.
     * Тип: Guid
     *
     * Generated from protobuf field <code>.google.protobuf.StringValue parent_id = 13;</code>
     * @param string|null $var
     * @return $this
     */
    public function setParentIdUnwrapped($var)
    {
        $this->writeWrapperValue("parent_id", $var);
        return $this;}

    /**
     * Аккаунт
     *
     * Generated from protobuf field <code>.google.protobuf.Int64Value account = 14;</code>
     * @return \Google\Protobuf\Int64Value|null
     */
    public function getAccount()
    {
        return $this->account;
    }

    public function hasAccount()
    {
        return isset($this->account);
    }

    public function clearAccount()
    {
        unset($this->account);
    }

    /**
     * Returns the unboxed value from <code>getAccount()</code>

     * Аккаунт
     *
     * Generated from protobuf field <code>.google.protobuf.Int64Value account = 14;</code>
     * @return int|string|null
     */
    public function getAccountUnwrapped()
    {
        return $this->readWrapperValue("account");
    }

    /**
     * Аккаунт
     *
     * Generated from protobuf field <code>.google.protobuf.Int64Value account = 14;</code>
     * @param \Google\Protobuf\Int64Value $var
     * @return $this
     */
    public function setAccount($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
        $this->account = $var;

        return $this;
    }

    /**
     * Sets the field by wrapping a primitive type in a Google\Protobuf\Int64Value object.

     * Аккаунт
     *
     * Generated from protobuf field <code>.google.protobuf.Int64Value account = 14;</code>
     * @param int|string|null $var
     * @return $this
     */
    public function setAccountUnwrapped($var)
    {
        $this->writeWrapperValue("account", $var);
        return $this;}

    /**
     * Снапшот состояния коммерческой возможности на момент создания подписки.
     * В данный момент это ссылка в базе на запись, в будущем это будет снапшот
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Offer offer = 15;</code>
     * @return \Keyapis\Subscription\V1\Offer|null
     */
    public function getOffer()
    {
        return $this->offer;
    }

    public function hasOffer()
    {
        return isset($this->offer);
    }

    public function clearOffer()
    {
        unset($this->offer);
    }

    /**
     * Снапшот состояния коммерческой возможности на момент создания подписки.
     * В данный момент это ссылка в базе на запись, в будущем это будет снапшот
     *
     * Generated from protobuf field <code>.keyapis.subscription.v1.Offer offer = 15;</code>
     * @param \Keyapis\Subscription\V1\Offer $var
     * @return $this
     */
    public function setOffer($var)
    {
        GPBUtil::checkMessage($var, \Keyapis\Subscription\V1\Offer::class);
        $this->offer = $var;

        return $this;
    }

    /**
     * Цена по скидки.
     * Заполнена если оплата подписки прошла по скидке, иначе очищается
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue discount_price = 16;</code>
     * @return \Google\Protobuf\DoubleValue|null
     */
    public function getDiscountPrice()
    {
        return $this->discount_price;
    }

    public function hasDiscountPrice()
    {
        return isset($this->discount_price);
    }

    public function clearDiscountPrice()
    {
        unset($this->discount_price);
    }

    /**
     * Returns the unboxed value from <code>getDiscountPrice()</code>

     * Цена по скидки.
     * Заполнена если оплата подписки прошла по скидке, иначе очищается
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue discount_price = 16;</code>
     * @return float|null
     */
    public function getDiscountPriceUnwrapped()
    {
        return $this->readWrapperValue("discount_price");
    }

    /**
     * Цена по скидки.
     * Заполнена если оплата подписки прошла по скидке, иначе очищается
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue discount_price = 16;</code>
     * @param \Google\Protobuf\DoubleValue $var
     * @return $this
     */
    public function setDiscountPrice($var)
    {
        GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
        $this->discount_price = $var;

        return $this;
    }

    /**
     * Sets the field by wrapping a primitive type in a Google\Protobuf\DoubleValue object.

     * Цена по скидки.
     * Заполнена если оплата подписки прошла по скидке, иначе очищается
     *
     * Generated from protobuf field <code>.google.protobuf.DoubleValue discount_price = 16;</code>
     * @param float|null $var
     * @return $this
     */
    public function setDiscountPriceUnwrapped($var)
    {
        $this->writeWrapperValue("discount_price", $var);
        return $this;}

}

