# coding=utf-8
# --------------------------------------------------------------------------
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model


class AccountEdit(Model):
    """AccountEdit.

    All required parameters must be populated in order to send to Azure.

    :param account_code: Required. The account code <span
     class='property-internal'>Required</span> <span
     class='property-internal'>Must be between 0 and 50 characters</span>
    :type account_code: str
    :param account_info: Required. The account info <span
     class='property-internal'>Required</span> <span
     class='property-internal'>Must be between 0 and 50 characters</span>
    :type account_info: str
    :param cost_center_id: Required. The identifier for the cost center to
     which the account belongs <span class='property-internal'>Topmost
     (CostCenter)</span> <span class='property-internal'>Required</span>
    :type cost_center_id: int
    :param customer_id: The identifier for the customer the account serves.
     This is normally only set for chargeback accounts <span
     class='property-internal'>Required (defined)</span>
    :type customer_id: int
    :param contact_id: The identifier for the account's contact <span
     class='property-internal'>Required (defined)</span>
    :type contact_id: int
    :param active: Indicates if the account is active or inactive <span
     class='property-internal'>Required (defined)</span>
    :type active: bool
    :param accrual_enabled: Indicates if the account is used with accruals
     <span class='property-internal'>Required (defined)</span>
    :type accrual_enabled: bool
    :param postal_code: The address postal code
     Required when country is US or CA <span class='property-internal'>Must be
     between 0 and 32 characters</span>
    :type postal_code: str
    :param city: The address city <span class='property-internal'>Must be
     between 0 and 100 characters</span> <span
     class='property-internal'>Required (defined)</span>
    :type city: str
    :param state: The address state <span class='property-internal'>Must be
     between 0 and 100 characters</span> <span
     class='property-internal'>Required (defined)</span>
    :type state: str
    :param country: Required. The address country <span
     class='property-internal'>Required</span> <span
     class='property-internal'>Must be between 0 and 64 characters</span>
    :type country: str
    :param line1: The address first line <span class='property-internal'>Must
     be between 0 and 100 characters</span> <span
     class='property-internal'>Required (defined)</span>
    :type line1: str
    :param line2: The address second line <span class='property-internal'>Must
     be between 0 and 100 characters</span> <span
     class='property-internal'>Required (defined)</span>
    :type line2: str
    :param line3: The address third line <span class='property-internal'>Must
     be between 0 and 100 characters</span> <span
     class='property-internal'>Required (defined)</span>. Default value: "Æ" .
    :type line3: str
    :param deposit_paid: The date and time the account deposit was paid <span
     class='property-internal'>Required (defined)</span>
    :type deposit_paid: datetime
    :param deposit_return: The date and time the account deposit was returned
     <span class='property-internal'>Required (defined)</span>
    :type deposit_return: datetime
    :param deposit_note: A note related to the account deposit <span
     class='property-internal'>Required (defined)</span>
    :type deposit_note: str
    :param deposit_amount: The account deposit amount <span
     class='property-internal'>Required (defined)</span>
    :type deposit_amount: float
    :param memo: The account memo <span class='property-internal'>Required
     (defined)</span>
    :type memo: str
    :param service_start: The account's service begin date and time <span
     class='property-internal'>Required (defined)</span>
    :type service_start: datetime
    :param service_end: The account's service end date and time <span
     class='property-internal'>Required (defined)</span>
    :type service_end: datetime
    :param general_ledger_id: The identifier for the account's generalLedgerId
     <span class='property-internal'>Required (defined)</span>
    :type general_ledger_id: int
    :param account_description: A description of the account <span
     class='property-internal'>Must be between 0 and 4000 characters</span>
     <span class='property-internal'>Required (defined)</span>. Default value:
     "Æ" .
    :type account_description: str
    """

    _validation = {
        'account_code': {'required': True, 'max_length': 50, 'min_length': 0},
        'account_info': {'required': True, 'max_length': 50, 'min_length': 0},
        'cost_center_id': {'required': True},
        'postal_code': {'max_length': 32, 'min_length': 0},
        'city': {'max_length': 100, 'min_length': 0},
        'state': {'max_length': 100, 'min_length': 0},
        'country': {'required': True, 'max_length': 64, 'min_length': 0},
        'line1': {'max_length': 100, 'min_length': 0},
        'line2': {'max_length': 100, 'min_length': 0},
        'line3': {'max_length': 100, 'min_length': 0},
        'account_description': {'max_length': 4000, 'min_length': 0},
    }

    _attribute_map = {
        'account_code': {'key': 'accountCode', 'type': 'str'},
        'account_info': {'key': 'accountInfo', 'type': 'str'},
        'cost_center_id': {'key': 'costCenterId', 'type': 'int'},
        'customer_id': {'key': 'customerId', 'type': 'int'},
        'contact_id': {'key': 'contactId', 'type': 'int'},
        'active': {'key': 'active', 'type': 'bool'},
        'accrual_enabled': {'key': 'accrualEnabled', 'type': 'bool'},
        'postal_code': {'key': 'postalCode', 'type': 'str'},
        'city': {'key': 'city', 'type': 'str'},
        'state': {'key': 'state', 'type': 'str'},
        'country': {'key': 'country', 'type': 'str'},
        'line1': {'key': 'line1', 'type': 'str'},
        'line2': {'key': 'line2', 'type': 'str'},
        'line3': {'key': 'line3', 'type': 'str'},
        'deposit_paid': {'key': 'depositPaid', 'type': 'iso-8601'},
        'deposit_return': {'key': 'depositReturn', 'type': 'iso-8601'},
        'deposit_note': {'key': 'depositNote', 'type': 'str'},
        'deposit_amount': {'key': 'depositAmount', 'type': 'float'},
        'memo': {'key': 'memo', 'type': 'str'},
        'service_start': {'key': 'serviceStart', 'type': 'iso-8601'},
        'service_end': {'key': 'serviceEnd', 'type': 'iso-8601'},
        'general_ledger_id': {'key': 'generalLedgerId', 'type': 'int'},
        'account_description': {'key': 'accountDescription', 'type': 'str'},
    }

    def __init__(self, **kwargs):
        super(AccountEdit, self).__init__(**kwargs)
        self.account_code = kwargs.get('account_code', None)
        self.account_info = kwargs.get('account_info', None)
        self.cost_center_id = kwargs.get('cost_center_id', None)
        self.customer_id = kwargs.get('customer_id', None)
        self.contact_id = kwargs.get('contact_id', None)
        self.active = kwargs.get('active', None)
        self.accrual_enabled = kwargs.get('accrual_enabled', None)
        self.postal_code = kwargs.get('postal_code', None)
        self.city = kwargs.get('city', None)
        self.state = kwargs.get('state', None)
        self.country = kwargs.get('country', None)
        self.line1 = kwargs.get('line1', None)
        self.line2 = kwargs.get('line2', None)
        self.line3 = kwargs.get('line3', "Æ")
        self.deposit_paid = kwargs.get('deposit_paid', None)
        self.deposit_return = kwargs.get('deposit_return', None)
        self.deposit_note = kwargs.get('deposit_note', None)
        self.deposit_amount = kwargs.get('deposit_amount', None)
        self.memo = kwargs.get('memo', None)
        self.service_start = kwargs.get('service_start', None)
        self.service_end = kwargs.get('service_end', None)
        self.general_ledger_id = kwargs.get('general_ledger_id', None)
        self.account_description = kwargs.get('account_description', "Æ")
