# This file was generated by liblab | https://liblab.com/

from __future__ import annotations
from .utils.json_map import JsonMap
from .base import BaseModel
from .shipment_service_options_access_point_cod import (
    ShipmentServiceOptionsAccessPointCod,
)
from .shipment_service_options_cod import ShipmentServiceOptionsCod
from .shipment_service_options_delivery_confirmation import (
    ShipmentServiceOptionsDeliveryConfirmation,
)
from .shipment_service_options_pickup_options import ShipmentServiceOptionsPickupOptions
from .shipment_service_options_delivery_options import (
    ShipmentServiceOptionsDeliveryOptions,
)
from .shipment_service_options_restricted_articles import (
    ShipmentServiceOptionsRestrictedArticles,
)
from .shipment_service_options_import_control import ShipmentServiceOptionsImportControl
from .shipment_service_options_return_service import ShipmentServiceOptionsReturnService


@JsonMap(
    {
        "saturday_pickup_indicator": "SaturdayPickupIndicator",
        "saturday_delivery_indicator": "SaturdayDeliveryIndicator",
        "sunday_delivery_indicator": "SundayDeliveryIndicator",
        "available_services_option": "AvailableServicesOption",
        "access_point_cod": "AccessPointCOD",
        "deliver_to_addressee_only_indicator": "DeliverToAddresseeOnlyIndicator",
        "direct_delivery_only_indicator": "DirectDeliveryOnlyIndicator",
        "cod": "COD",
        "delivery_confirmation": "DeliveryConfirmation",
        "return_of_document_indicator": "ReturnOfDocumentIndicator",
        "up_scarbonneutral_indicator": "UPScarbonneutralIndicator",
        "certificate_of_origin_indicator": "CertificateOfOriginIndicator",
        "pickup_options": "PickupOptions",
        "delivery_options": "DeliveryOptions",
        "restricted_articles": "RestrictedArticles",
        "shipper_export_declaration_indicator": "ShipperExportDeclarationIndicator",
        "commercial_invoice_removal_indicator": "CommercialInvoiceRemovalIndicator",
        "import_control": "ImportControl",
        "return_service": "ReturnService",
        "sdl_shipment_indicator": "SDLShipmentIndicator",
        "epra_indicator": "EPRAIndicator",
        "inside_delivery": "InsideDelivery",
        "item_disposal_indicator": "ItemDisposalIndicator",
    }
)
class ShipmentShipmentServiceOptions(BaseModel):
    """Shipment level Accessorials are included in this container.

    :param saturday_pickup_indicator: A flag indicating if the shipment requires a Saturday pickup. True if SaturdayPickupIndicator tag exists; false otherwise. Not available for GFP rating requests.  Empty Tag., defaults to None
    :type saturday_pickup_indicator: str, optional
    :param saturday_delivery_indicator: A flag indicating if a shipment must be delivered on a Saturday. True if SaturdayDeliveryIndicator tag exists; false otherwise  Empty Tag., defaults to None
    :type saturday_delivery_indicator: str, optional
    :param sunday_delivery_indicator: A flag indicating if a shipment must be delivered on a Sunday. True if SundayDeliveryIndicator tag exists; false otherwise  Empty Tag., defaults to None
    :type sunday_delivery_indicator: str, optional
    :param available_services_option: If we need diferent available services in response, this option is used for shop request option. SaturdayDeliveryIndicator/ SundayDeliveryIndicator will be ignored in that case.  Valid Values:1- Weekday+Saturday services2- Weekday+Sunday services3- Weekday+Sat services+Sun services, defaults to None
    :type available_services_option: str, optional
    :param access_point_cod: Access Point COD indicates Shipment level Access Point COD is requested for a shipment.  Valid only for "01 - Hold For Pickup At UPS Access Point" Shipment Indication type. Shipment Access Point COD is valid only for countries or territories within E.U. Not valid with (Shipment) COD. Not available to shipment with return service. , defaults to None
    :type access_point_cod: ShipmentServiceOptionsAccessPointCod, optional
    :param deliver_to_addressee_only_indicator: Presence/Absence Indicator. Any value inside is ignored. DeliverToAddresseeOnlyIndicator is shipper specified restriction that requires the addressee to be the one who takes final delivery of the "Hold For PickUp at UPS Access Point" package. Presence of indicator means shipper restriction will apply to the shipment.  Only valid for Shipment Indication type "01 - Hold For PickUp at UPS Access Point". , defaults to None
    :type deliver_to_addressee_only_indicator: str, optional
    :param direct_delivery_only_indicator: Presence/Absence Indicator. Any value inside is ignored. Direct Delivery Only (DDO) accessorial in a request would ensure that delivery is made only to the Ship To address on the shipping label.  This accessorial is not valid with Shipment Indication Types: - 01 - Hold For Pickup At UPS Access Point - 02 - UPS Access Point™ Delivery , defaults to None
    :type direct_delivery_only_indicator: str, optional
    :param cod: If present, indicates C.O.D. is requested for the shipment.  Shipment level C.O.D. is only available for EU origin countries or territories.C.O.D. shipments are only available for Shippers with Daily Pickup and Drop Shipping accounts., defaults to None
    :type cod: ShipmentServiceOptionsCod, optional
    :param delivery_confirmation: Delivery Confirmation Container.  DeliveryConfirmation and C.O.D. are mutually exclusive. Refer to the Appendix for a list of valid origin-destination country or territory pairs associated with each confirmation type., defaults to None
    :type delivery_confirmation: ShipmentServiceOptionsDeliveryConfirmation, optional
    :param return_of_document_indicator: Return of Documents Indicator - If the flag is present, the shipper has requested the ReturnOfDocument accessorial be added to the shipment  Valid for Poland to Poland shipment., defaults to None
    :type return_of_document_indicator: str, optional
    :param up_scarbonneutral_indicator: UPS carbon neutral indicator. Indicates the shipment will be rated as carbon neutral., defaults to None
    :type up_scarbonneutral_indicator: str, optional
    :param certificate_of_origin_indicator: The empty tag in request indicates that customer would be using UPS prepared SED form.  Valid for UPS World Wide Express Freight shipments., defaults to None
    :type certificate_of_origin_indicator: str, optional
    :param pickup_options: Shipment Service Pickup Options Container.  Valid for UPS Worldwide Express Freight and UPS Worldwide Express Freight Midday shipments., defaults to None
    :type pickup_options: ShipmentServiceOptionsPickupOptions, optional
    :param delivery_options: Shipment Service Delivery Options Container.  Valid for UPS Worldwide Express Freight and UPS Worldwide Express Freight Midday shipments., defaults to None
    :type delivery_options: ShipmentServiceOptionsDeliveryOptions, optional
    :param restricted_articles: Restricted Articles container.  Valid for UPS World Wide Express Freight shipments., defaults to None
    :type restricted_articles: ShipmentServiceOptionsRestrictedArticles, optional
    :param shipper_export_declaration_indicator: The empty tag in request indicates that customer would be using UPS prepared SED form.  Valid for UPS World Wide Express Freight shipments., defaults to None
    :type shipper_export_declaration_indicator: str, optional
    :param commercial_invoice_removal_indicator: Presence/Absence Indicator. Any value inside is ignored. CommercialInvoiceRemovalIndicator - empty tag means indicator is present. CommercialInvoiceRemovalIndicator allows a shipper to dictate that UPS remove the Commercial Invoice from the user's shipment before the shipment is delivered to the ultimate consignee., defaults to None
    :type commercial_invoice_removal_indicator: str, optional
    :param import_control: Container for type of Import Control shipments., defaults to None
    :type import_control: ShipmentServiceOptionsImportControl, optional
    :param return_service: Container for type of Return Services., defaults to None
    :type return_service: ShipmentServiceOptionsReturnService, optional
    :param sdl_shipment_indicator: Empty Tag means the indicator is present. This field is a flag to indicate if the receiver needs SDL rates in response. True if SDLShipmentIndicator tag exists; false otherwise.  If present, the State Department License (SDL) rates will be returned in the response.This service requires that the account number is enabled for SDL., defaults to None
    :type sdl_shipment_indicator: str, optional
    :param epra_indicator: For valid values, refer to Rating and Shipping COD Supported Countries or Territories in the Appendix.Presence/Absence Indicator. Any value inside is ignored. This field is a flag to indicate Package Release Code is requested for shipment. This accessorial is only valid with ShipmentIndicationType '01' - Hold for Pickup at UPS Access Point™. , defaults to None
    :type epra_indicator: str, optional
    :param inside_delivery: Inside Delivery accessory. Valid values: - 01 - White Glove - 02 - Room of Choice - 03 - Installation  Shippers account needs to have a valid contract for Heavy Goods Service. , defaults to None
    :type inside_delivery: str, optional
    :param item_disposal_indicator: Presence/Absence Indicator. Any value inside is ignored. If present, indicates that the customer would like items disposed.   Shippers account needs to have a valid contract for Heavy Goods Service., defaults to None
    :type item_disposal_indicator: str, optional
    """

    def __init__(
        self,
        saturday_pickup_indicator: str = None,
        saturday_delivery_indicator: str = None,
        sunday_delivery_indicator: str = None,
        available_services_option: str = None,
        access_point_cod: ShipmentServiceOptionsAccessPointCod = None,
        deliver_to_addressee_only_indicator: str = None,
        direct_delivery_only_indicator: str = None,
        cod: ShipmentServiceOptionsCod = None,
        delivery_confirmation: ShipmentServiceOptionsDeliveryConfirmation = None,
        return_of_document_indicator: str = None,
        up_scarbonneutral_indicator: str = None,
        certificate_of_origin_indicator: str = None,
        pickup_options: ShipmentServiceOptionsPickupOptions = None,
        delivery_options: ShipmentServiceOptionsDeliveryOptions = None,
        restricted_articles: ShipmentServiceOptionsRestrictedArticles = None,
        shipper_export_declaration_indicator: str = None,
        commercial_invoice_removal_indicator: str = None,
        import_control: ShipmentServiceOptionsImportControl = None,
        return_service: ShipmentServiceOptionsReturnService = None,
        sdl_shipment_indicator: str = None,
        epra_indicator: str = None,
        inside_delivery: str = None,
        item_disposal_indicator: str = None,
    ):
        if saturday_pickup_indicator is not None:
            self.saturday_pickup_indicator = saturday_pickup_indicator
        if saturday_delivery_indicator is not None:
            self.saturday_delivery_indicator = saturday_delivery_indicator
        if sunday_delivery_indicator is not None:
            self.sunday_delivery_indicator = sunday_delivery_indicator
        if available_services_option is not None:
            self.available_services_option = available_services_option
        if access_point_cod is not None:
            self.access_point_cod = self._define_object(
                access_point_cod, ShipmentServiceOptionsAccessPointCod
            )
        if deliver_to_addressee_only_indicator is not None:
            self.deliver_to_addressee_only_indicator = (
                deliver_to_addressee_only_indicator
            )
        if direct_delivery_only_indicator is not None:
            self.direct_delivery_only_indicator = direct_delivery_only_indicator
        if cod is not None:
            self.cod = self._define_object(cod, ShipmentServiceOptionsCod)
        if delivery_confirmation is not None:
            self.delivery_confirmation = self._define_object(
                delivery_confirmation, ShipmentServiceOptionsDeliveryConfirmation
            )
        if return_of_document_indicator is not None:
            self.return_of_document_indicator = return_of_document_indicator
        if up_scarbonneutral_indicator is not None:
            self.up_scarbonneutral_indicator = up_scarbonneutral_indicator
        if certificate_of_origin_indicator is not None:
            self.certificate_of_origin_indicator = certificate_of_origin_indicator
        if pickup_options is not None:
            self.pickup_options = self._define_object(
                pickup_options, ShipmentServiceOptionsPickupOptions
            )
        if delivery_options is not None:
            self.delivery_options = self._define_object(
                delivery_options, ShipmentServiceOptionsDeliveryOptions
            )
        if restricted_articles is not None:
            self.restricted_articles = self._define_object(
                restricted_articles, ShipmentServiceOptionsRestrictedArticles
            )
        if shipper_export_declaration_indicator is not None:
            self.shipper_export_declaration_indicator = (
                shipper_export_declaration_indicator
            )
        if commercial_invoice_removal_indicator is not None:
            self.commercial_invoice_removal_indicator = (
                commercial_invoice_removal_indicator
            )
        if import_control is not None:
            self.import_control = self._define_object(
                import_control, ShipmentServiceOptionsImportControl
            )
        if return_service is not None:
            self.return_service = self._define_object(
                return_service, ShipmentServiceOptionsReturnService
            )
        if sdl_shipment_indicator is not None:
            self.sdl_shipment_indicator = sdl_shipment_indicator
        if epra_indicator is not None:
            self.epra_indicator = epra_indicator
        if inside_delivery is not None:
            self.inside_delivery = inside_delivery
        if item_disposal_indicator is not None:
            self.item_disposal_indicator = item_disposal_indicator
