"""visaacceptancemergedspec.

This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
"""

# ruff: noqa: E501
from visaacceptancemergedspec.api_helper import (
    APIHelper,
)
from visaacceptancemergedspec.models.rental_address import (
    RentalAddress,
)
from visaacceptancemergedspec.models.return_address import (
    ReturnAddress,
)
from visaacceptancemergedspec.models.tax_details import (
    TaxDetails,
)


class AutoRental(object):
    """Implementation of the 'AutoRental' model.

    Attributes:
        no_show_indicator (bool): No Show Indicator provides an indicator noting that
            the individual did not show up after making a reservation for a vehicle.
            Possible values: - true - false
        customer_name (str): Name of the individual making the rental agreement.
            Valid data lengths by card:  |Card Specific
            Validation|VISA|MasterCard|Discover|AMEX| |--- |--- |--- |--- | | Filed
            Length| 40| 40| 29| 26| | Field Type| AN| ANS| AN| AN| | M/O/C| O| M| M|
            M|
        vehicle_class (str): Classification of the rented auto.  **NOTE** For VISA,
            this is a 2-byte optional code.  Valid values for American Express &
            MasterCard:  |American Express |MasterCard |Description| |--- |--- |--- |
            | 0001| 0001| Mini| | 0002| 0002| Subcompact| | 0003| 0003| Economy| |
            0004| 0004| Compact| | 0005| 0005| Midsize| | 0006| 0006| Intermediate| |
            0007| 0007| Standard| | 0008| 0008| Fulll size| | 0009| 0009| Luxury| |
            0010| 0010| Premium| | 0011| 0011| Minivan| | 0012| 0012| 12-passenger
            van| | 0013| 0013| Moving van| | 0014| 0014| 15-passenger van| | 0015|
            0015| Cargo van| | 0016| 0016| 12-foot truck| | 0017| 0017| 20-foot
            truck| | 0018| 0018| 24-foot truck| | 0019| 0019| 26-foot truck| | 0020|
            0020| Moped| | 0021| 0021| Stretch| | 0022| 0022| Regular| | 0023| 0023|
            Unique| | 0024| 0024| Exotic| | 0025| 0025| Small/medium truck| | 0026|
            0026| Large truck| | 0027| 0027| Small SUV| | 0028| 0028| Medium SUV| |
            0029| 0029| Large SUV| | 0030| 0030| Exotic SUV| | 9999| 9999|
            Miscellaneous|  Additional Values allowed **only** for `American
            Express`:  |American Express|MasterCard|Description| |--- |--- |--- | |
            0031| NA| Four Wheel Drive| | 0032| NA| Special| | 0099| NA| Taxi|
        distance_travelled (str): Total number of miles driven by the customer. This
            field is supported only for MasterCard and American Express.
        distance_unit (str): Miles/Kilometers Indicator shows whether the “miles”
            fields are expressed in miles or kilometers.  Allowed values: - `K` -
            Kilometers - `M` - Miles
        return_date_time (str): Date/time the auto was returned to the rental agency.
            Format: ``yyyy-MM-dd HH-mm-ss z`` This field is supported for Visa,
            MasterCard, and American Express.
        rental_date_time (str): Date/time the auto was picked up from the rental
            agency. Format: `yyyy-MM-dd HH-mm-ss z` This field is supported for Visa,
            MasterCard, and American Express.
        max_free_distance (str): Maximum number of free miles or kilometers allowed
            to a customer for the duration of the auto rental agreement. This field
            is supported only for MasterCard and American Express.
        insurance_indicator (bool): Used for MC and Discover  Valid values: - `true`
            - Yes (insurance was purchased) - `false` - No (insurance was not
            purchased)
        program_code (str): Used to identify special circumstances applicable to the
            Card Transaction or Cardholder, such as "renter” or ”show”.  This code is
            `2 digit` value agreed by Merchant and processor.
        return_address (ReturnAddress): The model property of type ReturnAddress.
        rental_address (RentalAddress): The model property of type RentalAddress.
        agreement_number (str): Auto rental agency’s agreement (invoice) number
            provided to the customer. It is used to trace any inquiries about
            transactions. This field is supported for Visa, MasterCard, and American
            Express. This Merchant-defined value, which may be composed of any
            combination of characters and/or numerals, may become part of the
            descriptive bill on the Cardmember's statement.
        odometer_reading (str): Odometer reading at time of vehicle rental.
        vehicle_identification_number (str): This field contains a unique identifier
            assigned by the company to the vehicle.
        company_id (str): Corporate Identifier provides the unique identifier of the
            corporation or entity renting the vehicle:  |Card Specific
            Validation|VISA|MasterCard|Discover|AMEX| |--- |--- |--- |--- | | Filed
            Length| NA| 12| NA| NA| | Field Type| NA| AN| NA| NA| | M/O/C| NA| O| NA|
            NA|
        number_of_additional_drivers (str): The number of additional drivers included
            on the rental agreement not including the individual who signed the
            rental agreement.
        driver_age (str): Age of the driver renting the vehicle.
        special_program_code (str): Program code used to identify special
            circumstances, such as “frequent renter” or “no show” status for the
            renter. Possible values: - `0`: not applicable (default) - `1`: frequent
            renter - `2`: no show  For authorizations, this field is supported only
            for Visa.  For captures, this field is supported for Visa, MasterCard,
            and American Express.  Code for special programs applicable to the Card
            Transaction or the Cardholder.
        vehicle_make (str): Make of the vehicle being rented (e.g., Chevrolet or
            Ford).
        vehicle_model (str): Model of the vehicle being rented (e.g., Cavalier or
            Focus).
        time_period (str): Indicates the time period for which the vehicle rental
            rate applies (e.g., daily, weekly or monthly). Daily, Weekly and Monthly
            are valid values.
        commodity_code (str): Commodity code or International description code used
            to classify the item. Contact your acquirer for a list of codes.
        customer_service_phone_number (str): Customer service telephone number that
            is used to resolve questions or disputes. Include the area code,
            exchange, and number. This field is supported only for MasterCard and
            American Express.
        tax_details (TaxDetails): The model property of type TaxDetails.
        insurance_amount (str): Insurance charges. Field is conditional and can
            include decimal point.
        one_way_drop_off_amount (str): Extra charges incurred for a one-way rental
            agreement for the auto. This field is supported only for Visa.
        adjusted_amount_indicator (str): For **MasterCard** and **Discover**:
            Adjusted amount indicator code that indicates any miscellaneous charges
            incurred after the auto was returned. Possible values: - `A` - Drop-off
            charges - `B` - Delivery charges - `C` - Parking expenses - `D` - Extra
            hours - `E` - Violations - `X` - More than one of the above charges  For
            **American Express**: Audit indicator code that indicates any adjustment
            for mileage, fuel, auto damage, etc. made to a rental agreement and
            whether the cardholder was notified.  Possible value for the
            authorization service: - `A` (default): adjustment amount greater than 0
            (zero)  Possible values for the capture service: - `X` - Multiple
            adjustments - `Y` - One adjustment only; Cardmember notified - `Z` - One
            adjustment only; Cardmember not notified. This value is used as the
            default if the request does not include this field and includes an
            adjustment amount greater than 0 (zero). This is an optional field.
        adjusted_amount (str): Adjusted Amount indicates whether any miscellaneous
            charges were incurred after the vehicle was returned.  For
            authorizations, this field is supported only for American Express.  For
            captures, this field is supported only for MasterCard and American
            Express. **NOTE** For American Express, this field is required if the
            `travelInformation.autoRental.adjustedAmountIndicator` field is included
            in the request and has a value; otherwise, this field is optional.  For
            all other card types, this field is ignored.
        fuel_charges (str): Extra gasoline charges that extend beyond the basic
            rental agreement. This field is supported only for Visa.
        weekly_rental_rate (str): Weekly Rental Amount provides the amount charged
            for a seven-day rental period. Field - Time Period needs to be populated
            with Weekly if this field is present
        daily_rental_rate (str): Daily auto rental rate charged. This field is
            supported only for MasterCard and American Express.  Field - Time Period
            needs to be populated with Daily if this field is present
        rate_per_mile (str): Rate charged for each mile. This field is supported only
            for MasterCard and American Express.
        mileage_charge (str): Regular Mileage Charge provides the amount charged for
            regular miles traveled during vehicle rental. Two decimal places
        extra_mileage_charge (str): Extra mileage charges that extend beyond the
            basic rental agreement. This field is supported only for Visa.
        late_fee_amount (str): Extra charges related to a late return of the rented
            auto. This field is supported only for Visa.
        towing_charge (str): (Towing Charges) provides the amount charged to tow the
            rental vehicle.
        extra_charge (str): (Extra Charges) provides the extra charges associated
            with the vehicle rental.
        gps_charge (str): Amount charged for renting a Global Positioning Service
            (GPS).
        phone_charge (str): Additional charges incurred for phone usage included on
            the total bill.
        parking_violation_charge (str): Extra charges incurred due to a parking
            violation for the auto. This field is supported only for Visa.
        other_charges (str): Total amount charged for all other miscellaneous charges
            not previously defined.
        company_name (str): Merchant to send their auto rental company name
        affiliate_name (str): When merchant wants to send the affiliate name.
        additional_properties (Dict[str, Any]): The additional properties for the
            model.

    """

    # Create a mapping from Model property names to API property names
    _names = {
        "no_show_indicator": "noShowIndicator",
        "customer_name": "customerName",
        "vehicle_class": "vehicleClass",
        "distance_travelled": "distanceTravelled",
        "distance_unit": "distanceUnit",
        "return_date_time": "returnDateTime",
        "rental_date_time": "rentalDateTime",
        "max_free_distance": "maxFreeDistance",
        "insurance_indicator": "insuranceIndicator",
        "program_code": "programCode",
        "return_address": "returnAddress",
        "rental_address": "rentalAddress",
        "agreement_number": "agreementNumber",
        "odometer_reading": "odometerReading",
        "vehicle_identification_number": "vehicleIdentificationNumber",
        "company_id": "companyId",
        "number_of_additional_drivers": "numberOfAdditionalDrivers",
        "driver_age": "driverAge",
        "special_program_code": "specialProgramCode",
        "vehicle_make": "vehicleMake",
        "vehicle_model": "vehicleModel",
        "time_period": "timePeriod",
        "commodity_code": "commodityCode",
        "customer_service_phone_number": "customerServicePhoneNumber",
        "tax_details": "taxDetails",
        "insurance_amount": "insuranceAmount",
        "one_way_drop_off_amount": "oneWayDropOffAmount",
        "adjusted_amount_indicator": "adjustedAmountIndicator",
        "adjusted_amount": "adjustedAmount",
        "fuel_charges": "fuelCharges",
        "weekly_rental_rate": "weeklyRentalRate",
        "daily_rental_rate": "dailyRentalRate",
        "rate_per_mile": "ratePerMile",
        "mileage_charge": "mileageCharge",
        "extra_mileage_charge": "extraMileageCharge",
        "late_fee_amount": "lateFeeAmount",
        "towing_charge": "towingCharge",
        "extra_charge": "extraCharge",
        "gps_charge": "gpsCharge",
        "phone_charge": "phoneCharge",
        "parking_violation_charge": "parkingViolationCharge",
        "other_charges": "otherCharges",
        "company_name": "companyName",
        "affiliate_name": "affiliateName",
    }

    _optionals = [
        "no_show_indicator",
        "customer_name",
        "vehicle_class",
        "distance_travelled",
        "distance_unit",
        "return_date_time",
        "rental_date_time",
        "max_free_distance",
        "insurance_indicator",
        "program_code",
        "return_address",
        "rental_address",
        "agreement_number",
        "odometer_reading",
        "vehicle_identification_number",
        "company_id",
        "number_of_additional_drivers",
        "driver_age",
        "special_program_code",
        "vehicle_make",
        "vehicle_model",
        "time_period",
        "commodity_code",
        "customer_service_phone_number",
        "tax_details",
        "insurance_amount",
        "one_way_drop_off_amount",
        "adjusted_amount_indicator",
        "adjusted_amount",
        "fuel_charges",
        "weekly_rental_rate",
        "daily_rental_rate",
        "rate_per_mile",
        "mileage_charge",
        "extra_mileage_charge",
        "late_fee_amount",
        "towing_charge",
        "extra_charge",
        "gps_charge",
        "phone_charge",
        "parking_violation_charge",
        "other_charges",
        "company_name",
        "affiliate_name",
    ]

    def __init__(
        self,
        no_show_indicator=APIHelper.SKIP,
        customer_name=APIHelper.SKIP,
        vehicle_class=APIHelper.SKIP,
        distance_travelled=APIHelper.SKIP,
        distance_unit=APIHelper.SKIP,
        return_date_time=APIHelper.SKIP,
        rental_date_time=APIHelper.SKIP,
        max_free_distance=APIHelper.SKIP,
        insurance_indicator=APIHelper.SKIP,
        program_code=APIHelper.SKIP,
        return_address=APIHelper.SKIP,
        rental_address=APIHelper.SKIP,
        agreement_number=APIHelper.SKIP,
        odometer_reading=APIHelper.SKIP,
        vehicle_identification_number=APIHelper.SKIP,
        company_id=APIHelper.SKIP,
        number_of_additional_drivers=APIHelper.SKIP,
        driver_age=APIHelper.SKIP,
        special_program_code=APIHelper.SKIP,
        vehicle_make=APIHelper.SKIP,
        vehicle_model=APIHelper.SKIP,
        time_period=APIHelper.SKIP,
        commodity_code=APIHelper.SKIP,
        customer_service_phone_number=APIHelper.SKIP,
        tax_details=APIHelper.SKIP,
        insurance_amount=APIHelper.SKIP,
        one_way_drop_off_amount=APIHelper.SKIP,
        adjusted_amount_indicator=APIHelper.SKIP,
        adjusted_amount=APIHelper.SKIP,
        fuel_charges=APIHelper.SKIP,
        weekly_rental_rate=APIHelper.SKIP,
        daily_rental_rate=APIHelper.SKIP,
        rate_per_mile=APIHelper.SKIP,
        mileage_charge=APIHelper.SKIP,
        extra_mileage_charge=APIHelper.SKIP,
        late_fee_amount=APIHelper.SKIP,
        towing_charge=APIHelper.SKIP,
        extra_charge=APIHelper.SKIP,
        gps_charge=APIHelper.SKIP,
        phone_charge=APIHelper.SKIP,
        parking_violation_charge=APIHelper.SKIP,
        other_charges=APIHelper.SKIP,
        company_name=APIHelper.SKIP,
        affiliate_name=APIHelper.SKIP,
        additional_properties=None):
        """Initialize a AutoRental instance."""
        # Initialize members of the class
        if no_show_indicator is not APIHelper.SKIP:
            self.no_show_indicator = no_show_indicator
        if customer_name is not APIHelper.SKIP:
            self.customer_name = customer_name
        if vehicle_class is not APIHelper.SKIP:
            self.vehicle_class = vehicle_class
        if distance_travelled is not APIHelper.SKIP:
            self.distance_travelled = distance_travelled
        if distance_unit is not APIHelper.SKIP:
            self.distance_unit = distance_unit
        if return_date_time is not APIHelper.SKIP:
            self.return_date_time = return_date_time
        if rental_date_time is not APIHelper.SKIP:
            self.rental_date_time = rental_date_time
        if max_free_distance is not APIHelper.SKIP:
            self.max_free_distance = max_free_distance
        if insurance_indicator is not APIHelper.SKIP:
            self.insurance_indicator = insurance_indicator
        if program_code is not APIHelper.SKIP:
            self.program_code = program_code
        if return_address is not APIHelper.SKIP:
            self.return_address = return_address
        if rental_address is not APIHelper.SKIP:
            self.rental_address = rental_address
        if agreement_number is not APIHelper.SKIP:
            self.agreement_number = agreement_number
        if odometer_reading is not APIHelper.SKIP:
            self.odometer_reading = odometer_reading
        if vehicle_identification_number is not APIHelper.SKIP:
            self.vehicle_identification_number = vehicle_identification_number
        if company_id is not APIHelper.SKIP:
            self.company_id = company_id
        if number_of_additional_drivers is not APIHelper.SKIP:
            self.number_of_additional_drivers = number_of_additional_drivers
        if driver_age is not APIHelper.SKIP:
            self.driver_age = driver_age
        if special_program_code is not APIHelper.SKIP:
            self.special_program_code = special_program_code
        if vehicle_make is not APIHelper.SKIP:
            self.vehicle_make = vehicle_make
        if vehicle_model is not APIHelper.SKIP:
            self.vehicle_model = vehicle_model
        if time_period is not APIHelper.SKIP:
            self.time_period = time_period
        if commodity_code is not APIHelper.SKIP:
            self.commodity_code = commodity_code
        if customer_service_phone_number is not APIHelper.SKIP:
            self.customer_service_phone_number = customer_service_phone_number
        if tax_details is not APIHelper.SKIP:
            self.tax_details = tax_details
        if insurance_amount is not APIHelper.SKIP:
            self.insurance_amount = insurance_amount
        if one_way_drop_off_amount is not APIHelper.SKIP:
            self.one_way_drop_off_amount = one_way_drop_off_amount
        if adjusted_amount_indicator is not APIHelper.SKIP:
            self.adjusted_amount_indicator = adjusted_amount_indicator
        if adjusted_amount is not APIHelper.SKIP:
            self.adjusted_amount = adjusted_amount
        if fuel_charges is not APIHelper.SKIP:
            self.fuel_charges = fuel_charges
        if weekly_rental_rate is not APIHelper.SKIP:
            self.weekly_rental_rate = weekly_rental_rate
        if daily_rental_rate is not APIHelper.SKIP:
            self.daily_rental_rate = daily_rental_rate
        if rate_per_mile is not APIHelper.SKIP:
            self.rate_per_mile = rate_per_mile
        if mileage_charge is not APIHelper.SKIP:
            self.mileage_charge = mileage_charge
        if extra_mileage_charge is not APIHelper.SKIP:
            self.extra_mileage_charge = extra_mileage_charge
        if late_fee_amount is not APIHelper.SKIP:
            self.late_fee_amount = late_fee_amount
        if towing_charge is not APIHelper.SKIP:
            self.towing_charge = towing_charge
        if extra_charge is not APIHelper.SKIP:
            self.extra_charge = extra_charge
        if gps_charge is not APIHelper.SKIP:
            self.gps_charge = gps_charge
        if phone_charge is not APIHelper.SKIP:
            self.phone_charge = phone_charge
        if parking_violation_charge is not APIHelper.SKIP:
            self.parking_violation_charge = parking_violation_charge
        if other_charges is not APIHelper.SKIP:
            self.other_charges = other_charges
        if company_name is not APIHelper.SKIP:
            self.company_name = company_name
        if affiliate_name is not APIHelper.SKIP:
            self.affiliate_name = affiliate_name

        # Add additional model properties to the instance
        if additional_properties is None:
            additional_properties = {}
        self.additional_properties = additional_properties

    @classmethod
    def from_dictionary(cls,
                        dictionary):
        """Create an instance of this model from a dictionary

        Args:
            dictionary (dictionary): A dictionary representation of the object
            as obtained from the deserialization of the server's response. The
            keys MUST match property names in the API description.

        Returns:
            object: An instance of this structure class.

        """
        if not isinstance(dictionary, dict) or dictionary is None:
            return None

        # Extract variables from the dictionary
        no_show_indicator =\
            dictionary.get("noShowIndicator")\
            if "noShowIndicator" in dictionary.keys()\
                else APIHelper.SKIP
        customer_name =\
            dictionary.get("customerName")\
            if dictionary.get("customerName")\
                else APIHelper.SKIP
        vehicle_class =\
            dictionary.get("vehicleClass")\
            if dictionary.get("vehicleClass")\
                else APIHelper.SKIP
        distance_travelled =\
            dictionary.get("distanceTravelled")\
            if dictionary.get("distanceTravelled")\
                else APIHelper.SKIP
        distance_unit =\
            dictionary.get("distanceUnit")\
            if dictionary.get("distanceUnit")\
                else APIHelper.SKIP
        return_date_time =\
            dictionary.get("returnDateTime")\
            if dictionary.get("returnDateTime")\
                else APIHelper.SKIP
        rental_date_time =\
            dictionary.get("rentalDateTime")\
            if dictionary.get("rentalDateTime")\
                else APIHelper.SKIP
        max_free_distance =\
            dictionary.get("maxFreeDistance")\
            if dictionary.get("maxFreeDistance")\
                else APIHelper.SKIP
        insurance_indicator =\
            dictionary.get("insuranceIndicator")\
            if "insuranceIndicator" in dictionary.keys()\
                else APIHelper.SKIP
        program_code =\
            dictionary.get("programCode")\
            if dictionary.get("programCode")\
                else APIHelper.SKIP
        return_address =\
            ReturnAddress.from_dictionary(
                dictionary.get("returnAddress"))\
                if "returnAddress" in dictionary.keys()\
                else APIHelper.SKIP
        rental_address =\
            RentalAddress.from_dictionary(
                dictionary.get("rentalAddress"))\
                if "rentalAddress" in dictionary.keys()\
                else APIHelper.SKIP
        agreement_number =\
            dictionary.get("agreementNumber")\
            if dictionary.get("agreementNumber")\
                else APIHelper.SKIP
        odometer_reading =\
            dictionary.get("odometerReading")\
            if dictionary.get("odometerReading")\
                else APIHelper.SKIP
        vehicle_identification_number =\
            dictionary.get("vehicleIdentificationNumber")\
            if dictionary.get("vehicleIdentificationNumber")\
                else APIHelper.SKIP
        company_id =\
            dictionary.get("companyId")\
            if dictionary.get("companyId")\
                else APIHelper.SKIP
        number_of_additional_drivers =\
            dictionary.get("numberOfAdditionalDrivers")\
            if dictionary.get("numberOfAdditionalDrivers")\
                else APIHelper.SKIP
        driver_age =\
            dictionary.get("driverAge")\
            if dictionary.get("driverAge")\
                else APIHelper.SKIP
        special_program_code =\
            dictionary.get("specialProgramCode")\
            if dictionary.get("specialProgramCode")\
                else APIHelper.SKIP
        vehicle_make =\
            dictionary.get("vehicleMake")\
            if dictionary.get("vehicleMake")\
                else APIHelper.SKIP
        vehicle_model =\
            dictionary.get("vehicleModel")\
            if dictionary.get("vehicleModel")\
                else APIHelper.SKIP
        time_period =\
            dictionary.get("timePeriod")\
            if dictionary.get("timePeriod")\
                else APIHelper.SKIP
        commodity_code =\
            dictionary.get("commodityCode")\
            if dictionary.get("commodityCode")\
                else APIHelper.SKIP
        customer_service_phone_number =\
            dictionary.get("customerServicePhoneNumber")\
            if dictionary.get("customerServicePhoneNumber")\
                else APIHelper.SKIP
        tax_details =\
            TaxDetails.from_dictionary(
                dictionary.get("taxDetails"))\
                if "taxDetails" in dictionary.keys()\
                else APIHelper.SKIP
        insurance_amount =\
            dictionary.get("insuranceAmount")\
            if dictionary.get("insuranceAmount")\
                else APIHelper.SKIP
        one_way_drop_off_amount =\
            dictionary.get("oneWayDropOffAmount")\
            if dictionary.get("oneWayDropOffAmount")\
                else APIHelper.SKIP
        adjusted_amount_indicator =\
            dictionary.get("adjustedAmountIndicator")\
            if dictionary.get("adjustedAmountIndicator")\
                else APIHelper.SKIP
        adjusted_amount =\
            dictionary.get("adjustedAmount")\
            if dictionary.get("adjustedAmount")\
                else APIHelper.SKIP
        fuel_charges =\
            dictionary.get("fuelCharges")\
            if dictionary.get("fuelCharges")\
                else APIHelper.SKIP
        weekly_rental_rate =\
            dictionary.get("weeklyRentalRate")\
            if dictionary.get("weeklyRentalRate")\
                else APIHelper.SKIP
        daily_rental_rate =\
            dictionary.get("dailyRentalRate")\
            if dictionary.get("dailyRentalRate")\
                else APIHelper.SKIP
        rate_per_mile =\
            dictionary.get("ratePerMile")\
            if dictionary.get("ratePerMile")\
                else APIHelper.SKIP
        mileage_charge =\
            dictionary.get("mileageCharge")\
            if dictionary.get("mileageCharge")\
                else APIHelper.SKIP
        extra_mileage_charge =\
            dictionary.get("extraMileageCharge")\
            if dictionary.get("extraMileageCharge")\
                else APIHelper.SKIP
        late_fee_amount =\
            dictionary.get("lateFeeAmount")\
            if dictionary.get("lateFeeAmount")\
                else APIHelper.SKIP
        towing_charge =\
            dictionary.get("towingCharge")\
            if dictionary.get("towingCharge")\
                else APIHelper.SKIP
        extra_charge =\
            dictionary.get("extraCharge")\
            if dictionary.get("extraCharge")\
                else APIHelper.SKIP
        gps_charge =\
            dictionary.get("gpsCharge")\
            if dictionary.get("gpsCharge")\
                else APIHelper.SKIP
        phone_charge =\
            dictionary.get("phoneCharge")\
            if dictionary.get("phoneCharge")\
                else APIHelper.SKIP
        parking_violation_charge =\
            dictionary.get("parkingViolationCharge")\
            if dictionary.get("parkingViolationCharge")\
                else APIHelper.SKIP
        other_charges =\
            dictionary.get("otherCharges")\
            if dictionary.get("otherCharges")\
                else APIHelper.SKIP
        company_name =\
            dictionary.get("companyName")\
            if dictionary.get("companyName")\
                else APIHelper.SKIP
        affiliate_name =\
            dictionary.get("affiliateName")\
            if dictionary.get("affiliateName")\
                else APIHelper.SKIP

        additional_properties = APIHelper.get_additional_properties(
            dictionary={k: v for k, v in dictionary.items()
                        if k not in cls._names.values()},
            unboxing_function=lambda value: value)

        # Return an object of this model
        return cls(no_show_indicator,
                   customer_name,
                   vehicle_class,
                   distance_travelled,
                   distance_unit,
                   return_date_time,
                   rental_date_time,
                   max_free_distance,
                   insurance_indicator,
                   program_code,
                   return_address,
                   rental_address,
                   agreement_number,
                   odometer_reading,
                   vehicle_identification_number,
                   company_id,
                   number_of_additional_drivers,
                   driver_age,
                   special_program_code,
                   vehicle_make,
                   vehicle_model,
                   time_period,
                   commodity_code,
                   customer_service_phone_number,
                   tax_details,
                   insurance_amount,
                   one_way_drop_off_amount,
                   adjusted_amount_indicator,
                   adjusted_amount,
                   fuel_charges,
                   weekly_rental_rate,
                   daily_rental_rate,
                   rate_per_mile,
                   mileage_charge,
                   extra_mileage_charge,
                   late_fee_amount,
                   towing_charge,
                   extra_charge,
                   gps_charge,
                   phone_charge,
                   parking_violation_charge,
                   other_charges,
                   company_name,
                   affiliate_name,
                   additional_properties)

    def __repr__(self):
        """Return a unambiguous string representation."""
        _no_show_indicator=(
            self.no_show_indicator
            if hasattr(self, "no_show_indicator")
            else None
        )
        _customer_name=(
            self.customer_name
            if hasattr(self, "customer_name")
            else None
        )
        _vehicle_class=(
            self.vehicle_class
            if hasattr(self, "vehicle_class")
            else None
        )
        _distance_travelled=(
            self.distance_travelled
            if hasattr(self, "distance_travelled")
            else None
        )
        _distance_unit=(
            self.distance_unit
            if hasattr(self, "distance_unit")
            else None
        )
        _return_date_time=(
            self.return_date_time
            if hasattr(self, "return_date_time")
            else None
        )
        _rental_date_time=(
            self.rental_date_time
            if hasattr(self, "rental_date_time")
            else None
        )
        _max_free_distance=(
            self.max_free_distance
            if hasattr(self, "max_free_distance")
            else None
        )
        _insurance_indicator=(
            self.insurance_indicator
            if hasattr(self, "insurance_indicator")
            else None
        )
        _program_code=(
            self.program_code
            if hasattr(self, "program_code")
            else None
        )
        _return_address=(
            self.return_address
            if hasattr(self, "return_address")
            else None
        )
        _rental_address=(
            self.rental_address
            if hasattr(self, "rental_address")
            else None
        )
        _agreement_number=(
            self.agreement_number
            if hasattr(self, "agreement_number")
            else None
        )
        _odometer_reading=(
            self.odometer_reading
            if hasattr(self, "odometer_reading")
            else None
        )
        _vehicle_identification_number=(
            self.vehicle_identification_number
            if hasattr(self, "vehicle_identification_number")
            else None
        )
        _company_id=(
            self.company_id
            if hasattr(self, "company_id")
            else None
        )
        _number_of_additional_drivers=(
            self.number_of_additional_drivers
            if hasattr(self, "number_of_additional_drivers")
            else None
        )
        _driver_age=(
            self.driver_age
            if hasattr(self, "driver_age")
            else None
        )
        _special_program_code=(
            self.special_program_code
            if hasattr(self, "special_program_code")
            else None
        )
        _vehicle_make=(
            self.vehicle_make
            if hasattr(self, "vehicle_make")
            else None
        )
        _vehicle_model=(
            self.vehicle_model
            if hasattr(self, "vehicle_model")
            else None
        )
        _time_period=(
            self.time_period
            if hasattr(self, "time_period")
            else None
        )
        _commodity_code=(
            self.commodity_code
            if hasattr(self, "commodity_code")
            else None
        )
        _customer_service_phone_number=(
            self.customer_service_phone_number
            if hasattr(self, "customer_service_phone_number")
            else None
        )
        _tax_details=(
            self.tax_details
            if hasattr(self, "tax_details")
            else None
        )
        _insurance_amount=(
            self.insurance_amount
            if hasattr(self, "insurance_amount")
            else None
        )
        _one_way_drop_off_amount=(
            self.one_way_drop_off_amount
            if hasattr(self, "one_way_drop_off_amount")
            else None
        )
        _adjusted_amount_indicator=(
            self.adjusted_amount_indicator
            if hasattr(self, "adjusted_amount_indicator")
            else None
        )
        _adjusted_amount=(
            self.adjusted_amount
            if hasattr(self, "adjusted_amount")
            else None
        )
        _fuel_charges=(
            self.fuel_charges
            if hasattr(self, "fuel_charges")
            else None
        )
        _weekly_rental_rate=(
            self.weekly_rental_rate
            if hasattr(self, "weekly_rental_rate")
            else None
        )
        _daily_rental_rate=(
            self.daily_rental_rate
            if hasattr(self, "daily_rental_rate")
            else None
        )
        _rate_per_mile=(
            self.rate_per_mile
            if hasattr(self, "rate_per_mile")
            else None
        )
        _mileage_charge=(
            self.mileage_charge
            if hasattr(self, "mileage_charge")
            else None
        )
        _extra_mileage_charge=(
            self.extra_mileage_charge
            if hasattr(self, "extra_mileage_charge")
            else None
        )
        _late_fee_amount=(
            self.late_fee_amount
            if hasattr(self, "late_fee_amount")
            else None
        )
        _towing_charge=(
            self.towing_charge
            if hasattr(self, "towing_charge")
            else None
        )
        _extra_charge=(
            self.extra_charge
            if hasattr(self, "extra_charge")
            else None
        )
        _gps_charge=(
            self.gps_charge
            if hasattr(self, "gps_charge")
            else None
        )
        _phone_charge=(
            self.phone_charge
            if hasattr(self, "phone_charge")
            else None
        )
        _parking_violation_charge=(
            self.parking_violation_charge
            if hasattr(self, "parking_violation_charge")
            else None
        )
        _other_charges=(
            self.other_charges
            if hasattr(self, "other_charges")
            else None
        )
        _company_name=(
            self.company_name
            if hasattr(self, "company_name")
            else None
        )
        _affiliate_name=(
            self.affiliate_name
            if hasattr(self, "affiliate_name")
            else None
        )
        _additional_properties=self.additional_properties
        return (
            f"{self.__class__.__name__}("
            f"no_show_indicator={_no_show_indicator!r}, "
            f"customer_name={_customer_name!r}, "
            f"vehicle_class={_vehicle_class!r}, "
            f"distance_travelled={_distance_travelled!r}, "
            f"distance_unit={_distance_unit!r}, "
            f"return_date_time={_return_date_time!r}, "
            f"rental_date_time={_rental_date_time!r}, "
            f"max_free_distance={_max_free_distance!r}, "
            f"insurance_indicator={_insurance_indicator!r}, "
            f"program_code={_program_code!r}, "
            f"return_address={_return_address!r}, "
            f"rental_address={_rental_address!r}, "
            f"agreement_number={_agreement_number!r}, "
            f"odometer_reading={_odometer_reading!r}, "
            f"vehicle_identification_number={_vehicle_identification_number!r}, "
            f"company_id={_company_id!r}, "
            f"number_of_additional_drivers={_number_of_additional_drivers!r}, "
            f"driver_age={_driver_age!r}, "
            f"special_program_code={_special_program_code!r}, "
            f"vehicle_make={_vehicle_make!r}, "
            f"vehicle_model={_vehicle_model!r}, "
            f"time_period={_time_period!r}, "
            f"commodity_code={_commodity_code!r}, "
            f"customer_service_phone_number={_customer_service_phone_number!r}, "
            f"tax_details={_tax_details!r}, "
            f"insurance_amount={_insurance_amount!r}, "
            f"one_way_drop_off_amount={_one_way_drop_off_amount!r}, "
            f"adjusted_amount_indicator={_adjusted_amount_indicator!r}, "
            f"adjusted_amount={_adjusted_amount!r}, "
            f"fuel_charges={_fuel_charges!r}, "
            f"weekly_rental_rate={_weekly_rental_rate!r}, "
            f"daily_rental_rate={_daily_rental_rate!r}, "
            f"rate_per_mile={_rate_per_mile!r}, "
            f"mileage_charge={_mileage_charge!r}, "
            f"extra_mileage_charge={_extra_mileage_charge!r}, "
            f"late_fee_amount={_late_fee_amount!r}, "
            f"towing_charge={_towing_charge!r}, "
            f"extra_charge={_extra_charge!r}, "
            f"gps_charge={_gps_charge!r}, "
            f"phone_charge={_phone_charge!r}, "
            f"parking_violation_charge={_parking_violation_charge!r}, "
            f"other_charges={_other_charges!r}, "
            f"company_name={_company_name!r}, "
            f"affiliate_name={_affiliate_name!r}, "
            f"additional_properties={_additional_properties!r}, "
            f")"
        )

    def __str__(self):
        """Return a human-readable string representation."""
        _no_show_indicator=(
            self.no_show_indicator
            if hasattr(self, "no_show_indicator")
            else None
        )
        _customer_name=(
            self.customer_name
            if hasattr(self, "customer_name")
            else None
        )
        _vehicle_class=(
            self.vehicle_class
            if hasattr(self, "vehicle_class")
            else None
        )
        _distance_travelled=(
            self.distance_travelled
            if hasattr(self, "distance_travelled")
            else None
        )
        _distance_unit=(
            self.distance_unit
            if hasattr(self, "distance_unit")
            else None
        )
        _return_date_time=(
            self.return_date_time
            if hasattr(self, "return_date_time")
            else None
        )
        _rental_date_time=(
            self.rental_date_time
            if hasattr(self, "rental_date_time")
            else None
        )
        _max_free_distance=(
            self.max_free_distance
            if hasattr(self, "max_free_distance")
            else None
        )
        _insurance_indicator=(
            self.insurance_indicator
            if hasattr(self, "insurance_indicator")
            else None
        )
        _program_code=(
            self.program_code
            if hasattr(self, "program_code")
            else None
        )
        _return_address=(
            self.return_address
            if hasattr(self, "return_address")
            else None
        )
        _rental_address=(
            self.rental_address
            if hasattr(self, "rental_address")
            else None
        )
        _agreement_number=(
            self.agreement_number
            if hasattr(self, "agreement_number")
            else None
        )
        _odometer_reading=(
            self.odometer_reading
            if hasattr(self, "odometer_reading")
            else None
        )
        _vehicle_identification_number=(
            self.vehicle_identification_number
            if hasattr(self, "vehicle_identification_number")
            else None
        )
        _company_id=(
            self.company_id
            if hasattr(self, "company_id")
            else None
        )
        _number_of_additional_drivers=(
            self.number_of_additional_drivers
            if hasattr(self, "number_of_additional_drivers")
            else None
        )
        _driver_age=(
            self.driver_age
            if hasattr(self, "driver_age")
            else None
        )
        _special_program_code=(
            self.special_program_code
            if hasattr(self, "special_program_code")
            else None
        )
        _vehicle_make=(
            self.vehicle_make
            if hasattr(self, "vehicle_make")
            else None
        )
        _vehicle_model=(
            self.vehicle_model
            if hasattr(self, "vehicle_model")
            else None
        )
        _time_period=(
            self.time_period
            if hasattr(self, "time_period")
            else None
        )
        _commodity_code=(
            self.commodity_code
            if hasattr(self, "commodity_code")
            else None
        )
        _customer_service_phone_number=(
            self.customer_service_phone_number
            if hasattr(self, "customer_service_phone_number")
            else None
        )
        _tax_details=(
            self.tax_details
            if hasattr(self, "tax_details")
            else None
        )
        _insurance_amount=(
            self.insurance_amount
            if hasattr(self, "insurance_amount")
            else None
        )
        _one_way_drop_off_amount=(
            self.one_way_drop_off_amount
            if hasattr(self, "one_way_drop_off_amount")
            else None
        )
        _adjusted_amount_indicator=(
            self.adjusted_amount_indicator
            if hasattr(self, "adjusted_amount_indicator")
            else None
        )
        _adjusted_amount=(
            self.adjusted_amount
            if hasattr(self, "adjusted_amount")
            else None
        )
        _fuel_charges=(
            self.fuel_charges
            if hasattr(self, "fuel_charges")
            else None
        )
        _weekly_rental_rate=(
            self.weekly_rental_rate
            if hasattr(self, "weekly_rental_rate")
            else None
        )
        _daily_rental_rate=(
            self.daily_rental_rate
            if hasattr(self, "daily_rental_rate")
            else None
        )
        _rate_per_mile=(
            self.rate_per_mile
            if hasattr(self, "rate_per_mile")
            else None
        )
        _mileage_charge=(
            self.mileage_charge
            if hasattr(self, "mileage_charge")
            else None
        )
        _extra_mileage_charge=(
            self.extra_mileage_charge
            if hasattr(self, "extra_mileage_charge")
            else None
        )
        _late_fee_amount=(
            self.late_fee_amount
            if hasattr(self, "late_fee_amount")
            else None
        )
        _towing_charge=(
            self.towing_charge
            if hasattr(self, "towing_charge")
            else None
        )
        _extra_charge=(
            self.extra_charge
            if hasattr(self, "extra_charge")
            else None
        )
        _gps_charge=(
            self.gps_charge
            if hasattr(self, "gps_charge")
            else None
        )
        _phone_charge=(
            self.phone_charge
            if hasattr(self, "phone_charge")
            else None
        )
        _parking_violation_charge=(
            self.parking_violation_charge
            if hasattr(self, "parking_violation_charge")
            else None
        )
        _other_charges=(
            self.other_charges
            if hasattr(self, "other_charges")
            else None
        )
        _company_name=(
            self.company_name
            if hasattr(self, "company_name")
            else None
        )
        _affiliate_name=(
            self.affiliate_name
            if hasattr(self, "affiliate_name")
            else None
        )
        _additional_properties=self.additional_properties
        return (
            f"{self.__class__.__name__}("
            f"no_show_indicator={_no_show_indicator!s}, "
            f"customer_name={_customer_name!s}, "
            f"vehicle_class={_vehicle_class!s}, "
            f"distance_travelled={_distance_travelled!s}, "
            f"distance_unit={_distance_unit!s}, "
            f"return_date_time={_return_date_time!s}, "
            f"rental_date_time={_rental_date_time!s}, "
            f"max_free_distance={_max_free_distance!s}, "
            f"insurance_indicator={_insurance_indicator!s}, "
            f"program_code={_program_code!s}, "
            f"return_address={_return_address!s}, "
            f"rental_address={_rental_address!s}, "
            f"agreement_number={_agreement_number!s}, "
            f"odometer_reading={_odometer_reading!s}, "
            f"vehicle_identification_number={_vehicle_identification_number!s}, "
            f"company_id={_company_id!s}, "
            f"number_of_additional_drivers={_number_of_additional_drivers!s}, "
            f"driver_age={_driver_age!s}, "
            f"special_program_code={_special_program_code!s}, "
            f"vehicle_make={_vehicle_make!s}, "
            f"vehicle_model={_vehicle_model!s}, "
            f"time_period={_time_period!s}, "
            f"commodity_code={_commodity_code!s}, "
            f"customer_service_phone_number={_customer_service_phone_number!s}, "
            f"tax_details={_tax_details!s}, "
            f"insurance_amount={_insurance_amount!s}, "
            f"one_way_drop_off_amount={_one_way_drop_off_amount!s}, "
            f"adjusted_amount_indicator={_adjusted_amount_indicator!s}, "
            f"adjusted_amount={_adjusted_amount!s}, "
            f"fuel_charges={_fuel_charges!s}, "
            f"weekly_rental_rate={_weekly_rental_rate!s}, "
            f"daily_rental_rate={_daily_rental_rate!s}, "
            f"rate_per_mile={_rate_per_mile!s}, "
            f"mileage_charge={_mileage_charge!s}, "
            f"extra_mileage_charge={_extra_mileage_charge!s}, "
            f"late_fee_amount={_late_fee_amount!s}, "
            f"towing_charge={_towing_charge!s}, "
            f"extra_charge={_extra_charge!s}, "
            f"gps_charge={_gps_charge!s}, "
            f"phone_charge={_phone_charge!s}, "
            f"parking_violation_charge={_parking_violation_charge!s}, "
            f"other_charges={_other_charges!s}, "
            f"company_name={_company_name!s}, "
            f"affiliate_name={_affiliate_name!s}, "
            f"additional_properties={_additional_properties!s}, "
            f")"
        )
