<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for Purchase_Order_WWS_DataType StructType
 * Meta information extracted from the WSDL
 * - documentation: You can't create service and project-based lines for External Warehouse type purchase orders. | You can't specify a third party tax code in the transaction tax code reference. | Don't provide email addresses when Issue Option isn't
 * Email. | Prepaid Spend Amortization Schedule is not allowed if The Prepayment Release Type is not Schedule. | Element containing Purchase Order Data and all Goods,Service and Project-Based Purchase Order Lines.
 * @subpackage Structs
 */
class Purchase_Order_WWS_DataType extends AbstractStructBase
{
    /**
     * The Purchase_Order_ID
     * Meta information extracted from the WSDL
     * - documentation: Purchase Order ID. This is the Purchase Order unique identifier.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Purchase_Order_ID;
    /**
     * The Submit
     * Meta information extracted from the WSDL
     * - documentation: Submit for Approval is a boolean flag indicating if the transaction is to be submitted or saved in draft mode. If this flag is set, the transaction will be submitted, otherwise the transaction is saved in draft. If Purchase Order
     * Issue Option is External, the Purchase will automatically be submitted and marked as Issued.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Submit;
    /**
     * The Locked_in_Workday
     * Meta information extracted from the WSDL
     * - documentation: Set to True to disable editing the purchase order inside the Workday application.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Locked_in_Workday;
    /**
     * The Document_Number
     * Meta information extracted from the WSDL
     * - documentation: Number of Purchase Order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Document_Number;
    /**
     * The Invoice_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Invoice Status for Purchase Order
     * - minOccurs: 0
     * @var \StructType\Document_StatusObjectType
     */
    public $Invoice_Status_Reference;
    /**
     * The Payment_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Payment Status for Purchase Order
     * - minOccurs: 0
     * @var \StructType\Document_Payment_StatusObjectType
     */
    public $Payment_Status_Reference;
    /**
     * The Receiving_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Receiving Status for Purchase Order.
     * - minOccurs: 0
     * @var \StructType\Document_StatusObjectType
     */
    public $Receiving_Status_Reference;
    /**
     * The Shipping_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Shipping Status for Purchase Order
     * - minOccurs: 0
     * @var \StructType\Document_StatusObjectType
     */
    public $Shipping_Status_Reference;
    /**
     * The Tracking_Status_Reference
     * Meta information extracted from the WSDL
     * - documentation: Tracking Status for Purchase Order. This field is read-only and ignored on Submit.
     * - minOccurs: 0
     * @var \StructType\PO_Acknowledgement_StatusObjectType
     */
    public $Tracking_Status_Reference;
    /**
     * The Company_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Company. Sets the Company for the Purchase Order.
     * @var \StructType\CompanyObjectType
     */
    public $Company_Reference;
    /**
     * The Supplier_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Supplier supplying the goods or services for the Purchase Order.
     * @var \StructType\Resource_ProviderObjectType
     */
    public $Supplier_Reference;
    /**
     * The Purchase_Order_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing tenanted Purchase Order Type in the system.
     * - minOccurs: 0
     * @var \StructType\Order_TypeObjectType
     */
    public $Purchase_Order_Type_Reference;
    /**
     * The External_PO_Number
     * Meta information extracted from the WSDL
     * - documentation: Reference to an External Purchase Order Number.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $External_PO_Number;
    /**
     * The Order_From_Supplier_Connection_Reference
     * Meta information extracted from the WSDL
     * - documentation: Order-from Connection tied to an existing Supplier supplying the goods.
     * - minOccurs: 0
     * @var \StructType\Order_From_Supplier_ConnectionObjectType
     */
    public $Order_From_Supplier_Connection_Reference;
    /**
     * The Document_Date
     * Meta information extracted from the WSDL
     * - documentation: The date of the Purchase Order.
     * - maxOccurs: 1
     * @var string
     */
    public $Document_Date;
    /**
     * The Tax_Amount
     * Meta information extracted from the WSDL
     * - documentation: Enter 1 or more lines with tax applicability on an invoice with Tax Amount. This tax applicability must be taxable, non-recoverable, and allocate non-recoverable tax. | Total Tax Amount for Tax Code and Tax Applicability | Tax Amount
     * for Expense Line | The tax amount to report for the expense. The tax code is defined on the itemized line. | Total Tax Amount for Tax Rate | Tax can only be entered if the Tax Option is Enter Tax Due to Supplier. | Expense Credit Card Extended Tax
     * Amount | Tax Amount
     * - base: xsd:decimal
     * - fractionDigits: 6
     * - maxOccurs: 1
     * - minOccurs: 0
     * - totalDigits: 26
     * @var float
     */
    public $Tax_Amount;
    /**
     * The Freight_Amount
     * Meta information extracted from the WSDL
     * - documentation: An optional addition of Freight Amount for the Requisition. | Freight charges incurred. | Freight Amount
     * - base: xsd:decimal
     * - fractionDigits: 6
     * - maxOccurs: 1
     * - minOccurs: 0
     * - totalDigits: 26
     * @var float
     */
    public $Freight_Amount;
    /**
     * The Other_Charges
     * Meta information extracted from the WSDL
     * - documentation: If there are Other Charges, then there must be at least one line with a Spend Category that has Allocate Other Charges. | An optional addition of Other Charges for the Requisition. | Other Charges
     * - base: xsd:decimal
     * - fractionDigits: 6
     * - maxOccurs: 1
     * - minOccurs: 0
     * - totalDigits: 26
     * @var float
     */
    public $Other_Charges;
    /**
     * The Payment_Terms_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference for the Payment Terms you associate with the purchase order. Workday defaults the Payment Terms when you specify terms for a referenced supplier contract, remit-to-connection from a referenced order-from-connection, or from
     * the supplier specified on the purchase order.
     * - minOccurs: 0
     * @var \StructType\Payment_TermsObjectType
     */
    public $Payment_Terms_Reference;
    /**
     * The Override_Payment_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Override Payment Type Reference provided is not an acceptable payment type for the Supplier. | Reference to the Override Payment Type acceptable for the Supplier referenced on the Purchase Order. If provided, it must be a valid
     * payment type for the Supplier.
     * - minOccurs: 0
     * @var \StructType\Payment_TypeObjectType
     */
    public $Override_Payment_Type_Reference;
    /**
     * The Procurement_Credit_Card_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Procurement Card is not valid for the Company and the Supplier, Buyer or Processing Worker. Please select a valid Credit Card from the prompt provided. | The Payment Type for the Purchase Order must be Credit Card in order to
     * assign a Procurement Card to the transaction. | Reference to the Procurement Card for the Purchase Order. If provided, the Payment Type reference must be set to Credit Card. If no Override Payment Type is supplied, then the Default Payment Type for
     * the Supplier needs to be Credit Card. Additionally, the Procurement Card must be valid for the Supplier or the Buyer.
     * - minOccurs: 0
     * @var \StructType\Worker_Credit_CardObjectType
     */
    public $Procurement_Credit_Card_Reference;
    /**
     * The Shipping_Terms_Reference
     * Meta information extracted from the WSDL
     * - documentation: Shipping Terms Request Reference
     * - minOccurs: 0
     * @var \StructType\Shipping_TermsObjectType
     */
    public $Shipping_Terms_Reference;
    /**
     * The Shipping_Method_Reference
     * Meta information extracted from the WSDL
     * - documentation: Shipping Method Request Reference
     * - minOccurs: 0
     * @var \StructType\Shipping_MethodObjectType
     */
    public $Shipping_Method_Reference;
    /**
     * The Shipping_Instruction
     * Meta information extracted from the WSDL
     * - documentation: Puts Shipping Instruction data for Purchase Order WWS
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Shipping_Instruction;
    /**
     * The Due_Date
     * Meta information extracted from the WSDL
     * - documentation: The anticipated date by which the Purchase Order should be fulfilled.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Due_Date;
    /**
     * The Supplier_Contract_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Supplier Contract.
     * - minOccurs: 0
     * @var \StructType\Supplier_Contract_BaseObjectType
     */
    public $Supplier_Contract_Reference;
    /**
     * The Currency_Reference
     * Meta information extracted from the WSDL
     * - documentation: Currency Reference
     * - minOccurs: 0
     * @var \StructType\CurrencyObjectType
     */
    public $Currency_Reference;
    /**
     * The Acknowledgement_Expected
     * Meta information extracted from the WSDL
     * - documentation: True if this Purchase Order is expecting a POA
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Acknowledgement_Expected;
    /**
     * The Default_Tax_Option_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Tax Option. If left blank, will default from the Company.
     * - minOccurs: 0
     * @var \StructType\Tax_OptionObjectType
     */
    public $Default_Tax_Option_Reference;
    /**
     * The Default_Tax_Code_Reference
     * Meta information extracted from the WSDL
     * - documentation: Default Tax Code for the Purchase Order
     * - minOccurs: 0
     * @var \StructType\Tax_CodeObjectType
     */
    public $Default_Tax_Code_Reference;
    /**
     * The Issue_Option_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Issue Option. If not entered, this will be defaulted to XML if the selected Supplier has a Supplier Link and Print otherwise. If Purchase Order Issue Option is External, the Purchase Order will automatically
     * be submitted and marked as Issued.
     * - minOccurs: 0
     * @var \StructType\Purchase_Order_Issue_OptionObjectType
     */
    public $Issue_Option_Reference;
    /**
     * The Purchase_Order_Issue_Email_Data
     * Meta information extracted from the WSDL
     * - documentation: Default PO Issue Email Data allows the user to select emails specified on Purchase Order Issue Email Data to be used as the default Issue Email address on all Purchase Orders.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Default_PO_Issue_Email_DataType[]
     */
    public $Purchase_Order_Issue_Email_Data;
    /**
     * The Buyer_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to the named buyer for the purchase order.
     * - minOccurs: 0
     * @var \StructType\WorkerObjectType
     */
    public $Buyer_Reference;
    /**
     * The Bill_To_Contact_Reference
     * Meta information extracted from the WSDL
     * - documentation: Name of the Bill-To Contact for the Purchase Order.
     * - minOccurs: 0
     * @var \StructType\WorkerObjectType
     */
    public $Bill_To_Contact_Reference;
    /**
     * The Bill_To_Contact_Detail
     * Meta information extracted from the WSDL
     * - documentation: Name of the Bill-To Contact. If value is not provided, Bill-To Contact will default to the name of the person submitting the purchase order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Bill_To_Contact_Detail;
    /**
     * The Bill_To_Address_Data
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\Bill_To_Address_ReferenceType
     */
    public $Bill_To_Address_Data;
    /**
     * The Ship_To_Contact_Reference
     * Meta information extracted from the WSDL
     * - documentation: Name of the Ship-To Contact for the Purchase Order.
     * - minOccurs: 0
     * @var \StructType\WorkerObjectType
     */
    public $Ship_To_Contact_Reference;
    /**
     * The Ship_To_Contact_Detail
     * Meta information extracted from the WSDL
     * - documentation: Name of the Ship-To Contact. If value is not provided, Ship-To Contact will default to the name of the person submitting the purchase order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Ship_To_Contact_Detail;
    /**
     * The Ship_To_Address_Data
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\Ship_To_Address_ReferenceType
     */
    public $Ship_To_Address_Data;
    /**
     * The Document_Link
     * Meta information extracted from the WSDL
     * - documentation: Document Link for Purchase Order
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Document_Link;
    /**
     * The Memo
     * Meta information extracted from the WSDL
     * - documentation: Free form text describing the purpose of the Purchase Order
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Memo;
    /**
     * The Internal_Memo
     * Meta information extracted from the WSDL
     * - documentation: Memo for internal notes that cannot be viewed by the supplier.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Internal_Memo;
    /**
     * The Prepaid
     * Meta information extracted from the WSDL
     * - documentation: Set the Prepaid value to true for Prepaid Purchase Order where all lines are Prepaid. If set, the lines cannot be also set to Prepaid individually
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Prepaid;
    /**
     * The Prepayment_Release_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to an existing Prepaid Amortization Type
     * - minOccurs: 0
     * @var \StructType\Prepaid_Amortization_TypeObjectType
     */
    public $Prepayment_Release_Type_Reference;
    /**
     * The Expected_Release_Date
     * Meta information extracted from the WSDL
     * - documentation: The Expected Amortization Date is used when the Prepaid Amortization Type is set to "Manual"
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Expected_Release_Date;
    /**
     * The Frequency_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Frequency to be used when generating the next prepaid accounting entry.
     * - minOccurs: 0
     * @var \StructType\Frequency_BehaviorObjectType
     */
    public $Frequency_Reference;
    /**
     * The Number_of_Prepayment_Installments
     * Meta information extracted from the WSDL
     * - documentation: The Number of Installments to use when accounting for the Prepaid Amortization.
     * - base: xsd:decimal
     * - fractionDigits: 0
     * - maxOccurs: 1
     * - minInclusive: 0
     * - minOccurs: 0
     * - totalDigits: 12
     * @var float
     */
    public $Number_of_Prepayment_Installments;
    /**
     * The Use_Invoice_Date
     * Meta information extracted from the WSDL
     * - documentation: Use the Invoice Date as the starting date for the first installment.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Use_Invoice_Date;
    /**
     * The Specified_Date
     * Meta information extracted from the WSDL
     * - documentation: Use the Specified Date as the starting date for the first installment.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Specified_Date;
    /**
     * The Use_Prepaid_Posting_Rules_for_Receipt_Accruals
     * Meta information extracted from the WSDL
     * - documentation: Use Prepaid Accounting Posting Rules for Receipt Accruals option.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Use_Prepaid_Posting_Rules_for_Receipt_Accruals;
    /**
     * The Percent_to_Retain
     * Meta information extracted from the WSDL
     * - documentation: Percent to Retain for Supplier Contract. | Percent to Retain for Purchase Order. | Percent to Retain for Supplier Contract Amendment.
     * - base: xsd:decimal
     * - fractionDigits: 6
     * - maxOccurs: 1
     * - minInclusive: 0
     * - minOccurs: 0
     * - totalDigits: 12
     * @var float
     */
    public $Percent_to_Retain;
    /**
     * The Estimated_Retention_Release_Date
     * Meta information extracted from the WSDL
     * - documentation: Estimated Retention Release Date for Purchase Order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Estimated_Retention_Release_Date;
    /**
     * The XMLNAME_3rd_Party_Retention
     * Meta information extracted from the WSDL
     * - documentation: 3rd Party Retention for Purchase Order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $XMLNAME_3rd_Party_Retention;
    /**
     * The Retention_Memo
     * Meta information extracted from the WSDL
     * - documentation: Retention Memo for Purchase Order.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Retention_Memo;
    /**
     * The Procedure_Information_Data
     * Meta information extracted from the WSDL
     * - documentation: Procedure Information associated with the Bill Only Purchase Order.
     * - minOccurs: 0
     * @var \StructType\Procedure_Information_DataType
     */
    public $Procedure_Information_Data;
    /**
     * The Goods_Line_Replacement_Data
     * Meta information extracted from the WSDL
     * - documentation: Encapsulating element containing Goods Purchase Order Line data.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Item_Order_Line_Replacement_DataType[]
     */
    public $Goods_Line_Replacement_Data;
    /**
     * The Service_Line_Replacement_Data
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Service_Order_Line_Replacement_DataType[]
     */
    public $Service_Line_Replacement_Data;
    /**
     * The Deliverables_Line_Replacement_Data
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Project_Based_Order_Line_Replacement_DataType[]
     */
    public $Deliverables_Line_Replacement_Data;
    /**
     * The Tax_Code_Data
     * Meta information extracted from the WSDL
     * - documentation: Tax Data by Tax Authority and Tax Code. For Customer Invoice Documents and Cash Sales tax data will always be calculated from the line data regardless of what is populated in Tax Rate Application Data. For Purchase Orders, Supplier
     * Invoice Documents and Ad hoc Payments, if data is in Tax Rate Application Data, then that will be the tax information that is saved. Otherwise, the tax will be calculated from the lines.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Taxable_Code_Application_NO_INPUT_DataType[]
     */
    public $Tax_Code_Data;
    /**
     * The Attachment_Data
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType[]
     */
    public $Attachment_Data;
    /**
     * The Purchase_Order_Prepaid_Spend_Amortization_Schedule
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType[]
     */
    public $Purchase_Order_Prepaid_Spend_Amortization_Schedule;
    /**
     * Constructor method for Purchase_Order_WWS_DataType
     * @uses Purchase_Order_WWS_DataType::setPurchase_Order_ID()
     * @uses Purchase_Order_WWS_DataType::setSubmit()
     * @uses Purchase_Order_WWS_DataType::setLocked_in_Workday()
     * @uses Purchase_Order_WWS_DataType::setDocument_Number()
     * @uses Purchase_Order_WWS_DataType::setInvoice_Status_Reference()
     * @uses Purchase_Order_WWS_DataType::setPayment_Status_Reference()
     * @uses Purchase_Order_WWS_DataType::setReceiving_Status_Reference()
     * @uses Purchase_Order_WWS_DataType::setShipping_Status_Reference()
     * @uses Purchase_Order_WWS_DataType::setTracking_Status_Reference()
     * @uses Purchase_Order_WWS_DataType::setCompany_Reference()
     * @uses Purchase_Order_WWS_DataType::setSupplier_Reference()
     * @uses Purchase_Order_WWS_DataType::setPurchase_Order_Type_Reference()
     * @uses Purchase_Order_WWS_DataType::setExternal_PO_Number()
     * @uses Purchase_Order_WWS_DataType::setOrder_From_Supplier_Connection_Reference()
     * @uses Purchase_Order_WWS_DataType::setDocument_Date()
     * @uses Purchase_Order_WWS_DataType::setTax_Amount()
     * @uses Purchase_Order_WWS_DataType::setFreight_Amount()
     * @uses Purchase_Order_WWS_DataType::setOther_Charges()
     * @uses Purchase_Order_WWS_DataType::setPayment_Terms_Reference()
     * @uses Purchase_Order_WWS_DataType::setOverride_Payment_Type_Reference()
     * @uses Purchase_Order_WWS_DataType::setProcurement_Credit_Card_Reference()
     * @uses Purchase_Order_WWS_DataType::setShipping_Terms_Reference()
     * @uses Purchase_Order_WWS_DataType::setShipping_Method_Reference()
     * @uses Purchase_Order_WWS_DataType::setShipping_Instruction()
     * @uses Purchase_Order_WWS_DataType::setDue_Date()
     * @uses Purchase_Order_WWS_DataType::setSupplier_Contract_Reference()
     * @uses Purchase_Order_WWS_DataType::setCurrency_Reference()
     * @uses Purchase_Order_WWS_DataType::setAcknowledgement_Expected()
     * @uses Purchase_Order_WWS_DataType::setDefault_Tax_Option_Reference()
     * @uses Purchase_Order_WWS_DataType::setDefault_Tax_Code_Reference()
     * @uses Purchase_Order_WWS_DataType::setIssue_Option_Reference()
     * @uses Purchase_Order_WWS_DataType::setPurchase_Order_Issue_Email_Data()
     * @uses Purchase_Order_WWS_DataType::setBuyer_Reference()
     * @uses Purchase_Order_WWS_DataType::setBill_To_Contact_Reference()
     * @uses Purchase_Order_WWS_DataType::setBill_To_Contact_Detail()
     * @uses Purchase_Order_WWS_DataType::setBill_To_Address_Data()
     * @uses Purchase_Order_WWS_DataType::setShip_To_Contact_Reference()
     * @uses Purchase_Order_WWS_DataType::setShip_To_Contact_Detail()
     * @uses Purchase_Order_WWS_DataType::setShip_To_Address_Data()
     * @uses Purchase_Order_WWS_DataType::setDocument_Link()
     * @uses Purchase_Order_WWS_DataType::setMemo()
     * @uses Purchase_Order_WWS_DataType::setInternal_Memo()
     * @uses Purchase_Order_WWS_DataType::setPrepaid()
     * @uses Purchase_Order_WWS_DataType::setPrepayment_Release_Type_Reference()
     * @uses Purchase_Order_WWS_DataType::setExpected_Release_Date()
     * @uses Purchase_Order_WWS_DataType::setFrequency_Reference()
     * @uses Purchase_Order_WWS_DataType::setNumber_of_Prepayment_Installments()
     * @uses Purchase_Order_WWS_DataType::setUse_Invoice_Date()
     * @uses Purchase_Order_WWS_DataType::setSpecified_Date()
     * @uses Purchase_Order_WWS_DataType::setUse_Prepaid_Posting_Rules_for_Receipt_Accruals()
     * @uses Purchase_Order_WWS_DataType::setPercent_to_Retain()
     * @uses Purchase_Order_WWS_DataType::setEstimated_Retention_Release_Date()
     * @uses Purchase_Order_WWS_DataType::setXMLNAME_3rd_Party_Retention()
     * @uses Purchase_Order_WWS_DataType::setRetention_Memo()
     * @uses Purchase_Order_WWS_DataType::setProcedure_Information_Data()
     * @uses Purchase_Order_WWS_DataType::setGoods_Line_Replacement_Data()
     * @uses Purchase_Order_WWS_DataType::setService_Line_Replacement_Data()
     * @uses Purchase_Order_WWS_DataType::setDeliverables_Line_Replacement_Data()
     * @uses Purchase_Order_WWS_DataType::setTax_Code_Data()
     * @uses Purchase_Order_WWS_DataType::setAttachment_Data()
     * @uses Purchase_Order_WWS_DataType::setPurchase_Order_Prepaid_Spend_Amortization_Schedule()
     * @param string $purchase_Order_ID
     * @param bool $submit
     * @param bool $locked_in_Workday
     * @param string $document_Number
     * @param \StructType\Document_StatusObjectType $invoice_Status_Reference
     * @param \StructType\Document_Payment_StatusObjectType $payment_Status_Reference
     * @param \StructType\Document_StatusObjectType $receiving_Status_Reference
     * @param \StructType\Document_StatusObjectType $shipping_Status_Reference
     * @param \StructType\PO_Acknowledgement_StatusObjectType $tracking_Status_Reference
     * @param \StructType\CompanyObjectType $company_Reference
     * @param \StructType\Resource_ProviderObjectType $supplier_Reference
     * @param \StructType\Order_TypeObjectType $purchase_Order_Type_Reference
     * @param string $external_PO_Number
     * @param \StructType\Order_From_Supplier_ConnectionObjectType $order_From_Supplier_Connection_Reference
     * @param string $document_Date
     * @param float $tax_Amount
     * @param float $freight_Amount
     * @param float $other_Charges
     * @param \StructType\Payment_TermsObjectType $payment_Terms_Reference
     * @param \StructType\Payment_TypeObjectType $override_Payment_Type_Reference
     * @param \StructType\Worker_Credit_CardObjectType $procurement_Credit_Card_Reference
     * @param \StructType\Shipping_TermsObjectType $shipping_Terms_Reference
     * @param \StructType\Shipping_MethodObjectType $shipping_Method_Reference
     * @param string $shipping_Instruction
     * @param string $due_Date
     * @param \StructType\Supplier_Contract_BaseObjectType $supplier_Contract_Reference
     * @param \StructType\CurrencyObjectType $currency_Reference
     * @param bool $acknowledgement_Expected
     * @param \StructType\Tax_OptionObjectType $default_Tax_Option_Reference
     * @param \StructType\Tax_CodeObjectType $default_Tax_Code_Reference
     * @param \StructType\Purchase_Order_Issue_OptionObjectType $issue_Option_Reference
     * @param \StructType\Default_PO_Issue_Email_DataType[] $purchase_Order_Issue_Email_Data
     * @param \StructType\WorkerObjectType $buyer_Reference
     * @param \StructType\WorkerObjectType $bill_To_Contact_Reference
     * @param string $bill_To_Contact_Detail
     * @param \StructType\Bill_To_Address_ReferenceType $bill_To_Address_Data
     * @param \StructType\WorkerObjectType $ship_To_Contact_Reference
     * @param string $ship_To_Contact_Detail
     * @param \StructType\Ship_To_Address_ReferenceType $ship_To_Address_Data
     * @param string $document_Link
     * @param string $memo
     * @param string $internal_Memo
     * @param bool $prepaid
     * @param \StructType\Prepaid_Amortization_TypeObjectType $prepayment_Release_Type_Reference
     * @param string $expected_Release_Date
     * @param \StructType\Frequency_BehaviorObjectType $frequency_Reference
     * @param float $number_of_Prepayment_Installments
     * @param bool $use_Invoice_Date
     * @param string $specified_Date
     * @param bool $use_Prepaid_Posting_Rules_for_Receipt_Accruals
     * @param float $percent_to_Retain
     * @param string $estimated_Retention_Release_Date
     * @param bool $xMLNAME_3rd_Party_Retention
     * @param string $retention_Memo
     * @param \StructType\Procedure_Information_DataType $procedure_Information_Data
     * @param \StructType\Item_Order_Line_Replacement_DataType[] $goods_Line_Replacement_Data
     * @param \StructType\Service_Order_Line_Replacement_DataType[] $service_Line_Replacement_Data
     * @param \StructType\Project_Based_Order_Line_Replacement_DataType[] $deliverables_Line_Replacement_Data
     * @param \StructType\Taxable_Code_Application_NO_INPUT_DataType[] $tax_Code_Data
     * @param \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType[] $attachment_Data
     * @param \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType[] $purchase_Order_Prepaid_Spend_Amortization_Schedule
     */
    public function __construct($purchase_Order_ID = null, $submit = null, $locked_in_Workday = null, $document_Number = null, \StructType\Document_StatusObjectType $invoice_Status_Reference = null, \StructType\Document_Payment_StatusObjectType $payment_Status_Reference = null, \StructType\Document_StatusObjectType $receiving_Status_Reference = null, \StructType\Document_StatusObjectType $shipping_Status_Reference = null, \StructType\PO_Acknowledgement_StatusObjectType $tracking_Status_Reference = null, \StructType\CompanyObjectType $company_Reference = null, \StructType\Resource_ProviderObjectType $supplier_Reference = null, \StructType\Order_TypeObjectType $purchase_Order_Type_Reference = null, $external_PO_Number = null, \StructType\Order_From_Supplier_ConnectionObjectType $order_From_Supplier_Connection_Reference = null, $document_Date = null, $tax_Amount = null, $freight_Amount = null, $other_Charges = null, \StructType\Payment_TermsObjectType $payment_Terms_Reference = null, \StructType\Payment_TypeObjectType $override_Payment_Type_Reference = null, \StructType\Worker_Credit_CardObjectType $procurement_Credit_Card_Reference = null, \StructType\Shipping_TermsObjectType $shipping_Terms_Reference = null, \StructType\Shipping_MethodObjectType $shipping_Method_Reference = null, $shipping_Instruction = null, $due_Date = null, \StructType\Supplier_Contract_BaseObjectType $supplier_Contract_Reference = null, \StructType\CurrencyObjectType $currency_Reference = null, $acknowledgement_Expected = null, \StructType\Tax_OptionObjectType $default_Tax_Option_Reference = null, \StructType\Tax_CodeObjectType $default_Tax_Code_Reference = null, \StructType\Purchase_Order_Issue_OptionObjectType $issue_Option_Reference = null, array $purchase_Order_Issue_Email_Data = array(), \StructType\WorkerObjectType $buyer_Reference = null, \StructType\WorkerObjectType $bill_To_Contact_Reference = null, $bill_To_Contact_Detail = null, \StructType\Bill_To_Address_ReferenceType $bill_To_Address_Data = null, \StructType\WorkerObjectType $ship_To_Contact_Reference = null, $ship_To_Contact_Detail = null, \StructType\Ship_To_Address_ReferenceType $ship_To_Address_Data = null, $document_Link = null, $memo = null, $internal_Memo = null, $prepaid = null, \StructType\Prepaid_Amortization_TypeObjectType $prepayment_Release_Type_Reference = null, $expected_Release_Date = null, \StructType\Frequency_BehaviorObjectType $frequency_Reference = null, $number_of_Prepayment_Installments = null, $use_Invoice_Date = null, $specified_Date = null, $use_Prepaid_Posting_Rules_for_Receipt_Accruals = null, $percent_to_Retain = null, $estimated_Retention_Release_Date = null, $xMLNAME_3rd_Party_Retention = null, $retention_Memo = null, \StructType\Procedure_Information_DataType $procedure_Information_Data = null, array $goods_Line_Replacement_Data = array(), array $service_Line_Replacement_Data = array(), array $deliverables_Line_Replacement_Data = array(), array $tax_Code_Data = array(), array $attachment_Data = array(), array $purchase_Order_Prepaid_Spend_Amortization_Schedule = array())
    {
        $this
            ->setPurchase_Order_ID($purchase_Order_ID)
            ->setSubmit($submit)
            ->setLocked_in_Workday($locked_in_Workday)
            ->setDocument_Number($document_Number)
            ->setInvoice_Status_Reference($invoice_Status_Reference)
            ->setPayment_Status_Reference($payment_Status_Reference)
            ->setReceiving_Status_Reference($receiving_Status_Reference)
            ->setShipping_Status_Reference($shipping_Status_Reference)
            ->setTracking_Status_Reference($tracking_Status_Reference)
            ->setCompany_Reference($company_Reference)
            ->setSupplier_Reference($supplier_Reference)
            ->setPurchase_Order_Type_Reference($purchase_Order_Type_Reference)
            ->setExternal_PO_Number($external_PO_Number)
            ->setOrder_From_Supplier_Connection_Reference($order_From_Supplier_Connection_Reference)
            ->setDocument_Date($document_Date)
            ->setTax_Amount($tax_Amount)
            ->setFreight_Amount($freight_Amount)
            ->setOther_Charges($other_Charges)
            ->setPayment_Terms_Reference($payment_Terms_Reference)
            ->setOverride_Payment_Type_Reference($override_Payment_Type_Reference)
            ->setProcurement_Credit_Card_Reference($procurement_Credit_Card_Reference)
            ->setShipping_Terms_Reference($shipping_Terms_Reference)
            ->setShipping_Method_Reference($shipping_Method_Reference)
            ->setShipping_Instruction($shipping_Instruction)
            ->setDue_Date($due_Date)
            ->setSupplier_Contract_Reference($supplier_Contract_Reference)
            ->setCurrency_Reference($currency_Reference)
            ->setAcknowledgement_Expected($acknowledgement_Expected)
            ->setDefault_Tax_Option_Reference($default_Tax_Option_Reference)
            ->setDefault_Tax_Code_Reference($default_Tax_Code_Reference)
            ->setIssue_Option_Reference($issue_Option_Reference)
            ->setPurchase_Order_Issue_Email_Data($purchase_Order_Issue_Email_Data)
            ->setBuyer_Reference($buyer_Reference)
            ->setBill_To_Contact_Reference($bill_To_Contact_Reference)
            ->setBill_To_Contact_Detail($bill_To_Contact_Detail)
            ->setBill_To_Address_Data($bill_To_Address_Data)
            ->setShip_To_Contact_Reference($ship_To_Contact_Reference)
            ->setShip_To_Contact_Detail($ship_To_Contact_Detail)
            ->setShip_To_Address_Data($ship_To_Address_Data)
            ->setDocument_Link($document_Link)
            ->setMemo($memo)
            ->setInternal_Memo($internal_Memo)
            ->setPrepaid($prepaid)
            ->setPrepayment_Release_Type_Reference($prepayment_Release_Type_Reference)
            ->setExpected_Release_Date($expected_Release_Date)
            ->setFrequency_Reference($frequency_Reference)
            ->setNumber_of_Prepayment_Installments($number_of_Prepayment_Installments)
            ->setUse_Invoice_Date($use_Invoice_Date)
            ->setSpecified_Date($specified_Date)
            ->setUse_Prepaid_Posting_Rules_for_Receipt_Accruals($use_Prepaid_Posting_Rules_for_Receipt_Accruals)
            ->setPercent_to_Retain($percent_to_Retain)
            ->setEstimated_Retention_Release_Date($estimated_Retention_Release_Date)
            ->setXMLNAME_3rd_Party_Retention($xMLNAME_3rd_Party_Retention)
            ->setRetention_Memo($retention_Memo)
            ->setProcedure_Information_Data($procedure_Information_Data)
            ->setGoods_Line_Replacement_Data($goods_Line_Replacement_Data)
            ->setService_Line_Replacement_Data($service_Line_Replacement_Data)
            ->setDeliverables_Line_Replacement_Data($deliverables_Line_Replacement_Data)
            ->setTax_Code_Data($tax_Code_Data)
            ->setAttachment_Data($attachment_Data)
            ->setPurchase_Order_Prepaid_Spend_Amortization_Schedule($purchase_Order_Prepaid_Spend_Amortization_Schedule);
    }
    /**
     * Get Purchase_Order_ID value
     * @return string|null
     */
    public function getPurchase_Order_ID()
    {
        return $this->Purchase_Order_ID;
    }
    /**
     * Set Purchase_Order_ID value
     * @param string $purchase_Order_ID
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPurchase_Order_ID($purchase_Order_ID = null)
    {
        // validation for constraint: string
        if (!is_null($purchase_Order_ID) && !is_string($purchase_Order_ID)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($purchase_Order_ID, true), gettype($purchase_Order_ID)), __LINE__);
        }
        $this->Purchase_Order_ID = $purchase_Order_ID;
        return $this;
    }
    /**
     * Get Submit value
     * @return bool|null
     */
    public function getSubmit()
    {
        return $this->Submit;
    }
    /**
     * Set Submit value
     * @param bool $submit
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setSubmit($submit = null)
    {
        // validation for constraint: boolean
        if (!is_null($submit) && !is_bool($submit)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($submit, true), gettype($submit)), __LINE__);
        }
        $this->Submit = $submit;
        return $this;
    }
    /**
     * Get Locked_in_Workday value
     * @return bool|null
     */
    public function getLocked_in_Workday()
    {
        return $this->Locked_in_Workday;
    }
    /**
     * Set Locked_in_Workday value
     * @param bool $locked_in_Workday
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setLocked_in_Workday($locked_in_Workday = null)
    {
        // validation for constraint: boolean
        if (!is_null($locked_in_Workday) && !is_bool($locked_in_Workday)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($locked_in_Workday, true), gettype($locked_in_Workday)), __LINE__);
        }
        $this->Locked_in_Workday = $locked_in_Workday;
        return $this;
    }
    /**
     * Get Document_Number value
     * @return string|null
     */
    public function getDocument_Number()
    {
        return $this->Document_Number;
    }
    /**
     * Set Document_Number value
     * @param string $document_Number
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDocument_Number($document_Number = null)
    {
        // validation for constraint: string
        if (!is_null($document_Number) && !is_string($document_Number)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($document_Number, true), gettype($document_Number)), __LINE__);
        }
        $this->Document_Number = $document_Number;
        return $this;
    }
    /**
     * Get Invoice_Status_Reference value
     * @return \StructType\Document_StatusObjectType|null
     */
    public function getInvoice_Status_Reference()
    {
        return $this->Invoice_Status_Reference;
    }
    /**
     * Set Invoice_Status_Reference value
     * @param \StructType\Document_StatusObjectType $invoice_Status_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setInvoice_Status_Reference(\StructType\Document_StatusObjectType $invoice_Status_Reference = null)
    {
        $this->Invoice_Status_Reference = $invoice_Status_Reference;
        return $this;
    }
    /**
     * Get Payment_Status_Reference value
     * @return \StructType\Document_Payment_StatusObjectType|null
     */
    public function getPayment_Status_Reference()
    {
        return $this->Payment_Status_Reference;
    }
    /**
     * Set Payment_Status_Reference value
     * @param \StructType\Document_Payment_StatusObjectType $payment_Status_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPayment_Status_Reference(\StructType\Document_Payment_StatusObjectType $payment_Status_Reference = null)
    {
        $this->Payment_Status_Reference = $payment_Status_Reference;
        return $this;
    }
    /**
     * Get Receiving_Status_Reference value
     * @return \StructType\Document_StatusObjectType|null
     */
    public function getReceiving_Status_Reference()
    {
        return $this->Receiving_Status_Reference;
    }
    /**
     * Set Receiving_Status_Reference value
     * @param \StructType\Document_StatusObjectType $receiving_Status_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setReceiving_Status_Reference(\StructType\Document_StatusObjectType $receiving_Status_Reference = null)
    {
        $this->Receiving_Status_Reference = $receiving_Status_Reference;
        return $this;
    }
    /**
     * Get Shipping_Status_Reference value
     * @return \StructType\Document_StatusObjectType|null
     */
    public function getShipping_Status_Reference()
    {
        return $this->Shipping_Status_Reference;
    }
    /**
     * Set Shipping_Status_Reference value
     * @param \StructType\Document_StatusObjectType $shipping_Status_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShipping_Status_Reference(\StructType\Document_StatusObjectType $shipping_Status_Reference = null)
    {
        $this->Shipping_Status_Reference = $shipping_Status_Reference;
        return $this;
    }
    /**
     * Get Tracking_Status_Reference value
     * @return \StructType\PO_Acknowledgement_StatusObjectType|null
     */
    public function getTracking_Status_Reference()
    {
        return $this->Tracking_Status_Reference;
    }
    /**
     * Set Tracking_Status_Reference value
     * @param \StructType\PO_Acknowledgement_StatusObjectType $tracking_Status_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setTracking_Status_Reference(\StructType\PO_Acknowledgement_StatusObjectType $tracking_Status_Reference = null)
    {
        $this->Tracking_Status_Reference = $tracking_Status_Reference;
        return $this;
    }
    /**
     * Get Company_Reference value
     * @return \StructType\CompanyObjectType|null
     */
    public function getCompany_Reference()
    {
        return $this->Company_Reference;
    }
    /**
     * Set Company_Reference value
     * @param \StructType\CompanyObjectType $company_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setCompany_Reference(\StructType\CompanyObjectType $company_Reference = null)
    {
        $this->Company_Reference = $company_Reference;
        return $this;
    }
    /**
     * Get Supplier_Reference value
     * @return \StructType\Resource_ProviderObjectType|null
     */
    public function getSupplier_Reference()
    {
        return $this->Supplier_Reference;
    }
    /**
     * Set Supplier_Reference value
     * @param \StructType\Resource_ProviderObjectType $supplier_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setSupplier_Reference(\StructType\Resource_ProviderObjectType $supplier_Reference = null)
    {
        $this->Supplier_Reference = $supplier_Reference;
        return $this;
    }
    /**
     * Get Purchase_Order_Type_Reference value
     * @return \StructType\Order_TypeObjectType|null
     */
    public function getPurchase_Order_Type_Reference()
    {
        return $this->Purchase_Order_Type_Reference;
    }
    /**
     * Set Purchase_Order_Type_Reference value
     * @param \StructType\Order_TypeObjectType $purchase_Order_Type_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPurchase_Order_Type_Reference(\StructType\Order_TypeObjectType $purchase_Order_Type_Reference = null)
    {
        $this->Purchase_Order_Type_Reference = $purchase_Order_Type_Reference;
        return $this;
    }
    /**
     * Get External_PO_Number value
     * @return string|null
     */
    public function getExternal_PO_Number()
    {
        return $this->External_PO_Number;
    }
    /**
     * Set External_PO_Number value
     * @param string $external_PO_Number
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setExternal_PO_Number($external_PO_Number = null)
    {
        // validation for constraint: string
        if (!is_null($external_PO_Number) && !is_string($external_PO_Number)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($external_PO_Number, true), gettype($external_PO_Number)), __LINE__);
        }
        $this->External_PO_Number = $external_PO_Number;
        return $this;
    }
    /**
     * Get Order_From_Supplier_Connection_Reference value
     * @return \StructType\Order_From_Supplier_ConnectionObjectType|null
     */
    public function getOrder_From_Supplier_Connection_Reference()
    {
        return $this->Order_From_Supplier_Connection_Reference;
    }
    /**
     * Set Order_From_Supplier_Connection_Reference value
     * @param \StructType\Order_From_Supplier_ConnectionObjectType $order_From_Supplier_Connection_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setOrder_From_Supplier_Connection_Reference(\StructType\Order_From_Supplier_ConnectionObjectType $order_From_Supplier_Connection_Reference = null)
    {
        $this->Order_From_Supplier_Connection_Reference = $order_From_Supplier_Connection_Reference;
        return $this;
    }
    /**
     * Get Document_Date value
     * @return string|null
     */
    public function getDocument_Date()
    {
        return $this->Document_Date;
    }
    /**
     * Set Document_Date value
     * @param string $document_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDocument_Date($document_Date = null)
    {
        // validation for constraint: string
        if (!is_null($document_Date) && !is_string($document_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($document_Date, true), gettype($document_Date)), __LINE__);
        }
        $this->Document_Date = $document_Date;
        return $this;
    }
    /**
     * Get Tax_Amount value
     * @return float|null
     */
    public function getTax_Amount()
    {
        return $this->Tax_Amount;
    }
    /**
     * Set Tax_Amount value
     * @param float $tax_Amount
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setTax_Amount($tax_Amount = null)
    {
        // validation for constraint: float
        if (!is_null($tax_Amount) && !(is_float($tax_Amount) || is_numeric($tax_Amount))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($tax_Amount, true), gettype($tax_Amount)), __LINE__);
        }
        // validation for constraint: fractionDigits(6)
        if (!is_null($tax_Amount) && mb_strlen(mb_substr($tax_Amount, false !== mb_strpos($tax_Amount, '.') ? mb_strpos($tax_Amount, '.') + 1 : mb_strlen($tax_Amount))) > 6) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 6 fraction digits, %d given', var_export($tax_Amount, true), mb_strlen(mb_substr($tax_Amount, mb_strpos($tax_Amount, '.') + 1))), __LINE__);
        }
        // validation for constraint: totalDigits(26)
        if (!is_null($tax_Amount) && mb_strlen(preg_replace('/(\D)/', '', $tax_Amount)) > 26) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 26 digits, "%d" given', var_export($tax_Amount, true), mb_strlen(preg_replace('/(\D)/', '', $tax_Amount))), __LINE__);
        }
        $this->Tax_Amount = $tax_Amount;
        return $this;
    }
    /**
     * Get Freight_Amount value
     * @return float|null
     */
    public function getFreight_Amount()
    {
        return $this->Freight_Amount;
    }
    /**
     * Set Freight_Amount value
     * @param float $freight_Amount
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setFreight_Amount($freight_Amount = null)
    {
        // validation for constraint: float
        if (!is_null($freight_Amount) && !(is_float($freight_Amount) || is_numeric($freight_Amount))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($freight_Amount, true), gettype($freight_Amount)), __LINE__);
        }
        // validation for constraint: fractionDigits(6)
        if (!is_null($freight_Amount) && mb_strlen(mb_substr($freight_Amount, false !== mb_strpos($freight_Amount, '.') ? mb_strpos($freight_Amount, '.') + 1 : mb_strlen($freight_Amount))) > 6) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 6 fraction digits, %d given', var_export($freight_Amount, true), mb_strlen(mb_substr($freight_Amount, mb_strpos($freight_Amount, '.') + 1))), __LINE__);
        }
        // validation for constraint: totalDigits(26)
        if (!is_null($freight_Amount) && mb_strlen(preg_replace('/(\D)/', '', $freight_Amount)) > 26) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 26 digits, "%d" given', var_export($freight_Amount, true), mb_strlen(preg_replace('/(\D)/', '', $freight_Amount))), __LINE__);
        }
        $this->Freight_Amount = $freight_Amount;
        return $this;
    }
    /**
     * Get Other_Charges value
     * @return float|null
     */
    public function getOther_Charges()
    {
        return $this->Other_Charges;
    }
    /**
     * Set Other_Charges value
     * @param float $other_Charges
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setOther_Charges($other_Charges = null)
    {
        // validation for constraint: float
        if (!is_null($other_Charges) && !(is_float($other_Charges) || is_numeric($other_Charges))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($other_Charges, true), gettype($other_Charges)), __LINE__);
        }
        // validation for constraint: fractionDigits(6)
        if (!is_null($other_Charges) && mb_strlen(mb_substr($other_Charges, false !== mb_strpos($other_Charges, '.') ? mb_strpos($other_Charges, '.') + 1 : mb_strlen($other_Charges))) > 6) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 6 fraction digits, %d given', var_export($other_Charges, true), mb_strlen(mb_substr($other_Charges, mb_strpos($other_Charges, '.') + 1))), __LINE__);
        }
        // validation for constraint: totalDigits(26)
        if (!is_null($other_Charges) && mb_strlen(preg_replace('/(\D)/', '', $other_Charges)) > 26) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 26 digits, "%d" given', var_export($other_Charges, true), mb_strlen(preg_replace('/(\D)/', '', $other_Charges))), __LINE__);
        }
        $this->Other_Charges = $other_Charges;
        return $this;
    }
    /**
     * Get Payment_Terms_Reference value
     * @return \StructType\Payment_TermsObjectType|null
     */
    public function getPayment_Terms_Reference()
    {
        return $this->Payment_Terms_Reference;
    }
    /**
     * Set Payment_Terms_Reference value
     * @param \StructType\Payment_TermsObjectType $payment_Terms_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPayment_Terms_Reference(\StructType\Payment_TermsObjectType $payment_Terms_Reference = null)
    {
        $this->Payment_Terms_Reference = $payment_Terms_Reference;
        return $this;
    }
    /**
     * Get Override_Payment_Type_Reference value
     * @return \StructType\Payment_TypeObjectType|null
     */
    public function getOverride_Payment_Type_Reference()
    {
        return $this->Override_Payment_Type_Reference;
    }
    /**
     * Set Override_Payment_Type_Reference value
     * @param \StructType\Payment_TypeObjectType $override_Payment_Type_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setOverride_Payment_Type_Reference(\StructType\Payment_TypeObjectType $override_Payment_Type_Reference = null)
    {
        $this->Override_Payment_Type_Reference = $override_Payment_Type_Reference;
        return $this;
    }
    /**
     * Get Procurement_Credit_Card_Reference value
     * @return \StructType\Worker_Credit_CardObjectType|null
     */
    public function getProcurement_Credit_Card_Reference()
    {
        return $this->Procurement_Credit_Card_Reference;
    }
    /**
     * Set Procurement_Credit_Card_Reference value
     * @param \StructType\Worker_Credit_CardObjectType $procurement_Credit_Card_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setProcurement_Credit_Card_Reference(\StructType\Worker_Credit_CardObjectType $procurement_Credit_Card_Reference = null)
    {
        $this->Procurement_Credit_Card_Reference = $procurement_Credit_Card_Reference;
        return $this;
    }
    /**
     * Get Shipping_Terms_Reference value
     * @return \StructType\Shipping_TermsObjectType|null
     */
    public function getShipping_Terms_Reference()
    {
        return $this->Shipping_Terms_Reference;
    }
    /**
     * Set Shipping_Terms_Reference value
     * @param \StructType\Shipping_TermsObjectType $shipping_Terms_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShipping_Terms_Reference(\StructType\Shipping_TermsObjectType $shipping_Terms_Reference = null)
    {
        $this->Shipping_Terms_Reference = $shipping_Terms_Reference;
        return $this;
    }
    /**
     * Get Shipping_Method_Reference value
     * @return \StructType\Shipping_MethodObjectType|null
     */
    public function getShipping_Method_Reference()
    {
        return $this->Shipping_Method_Reference;
    }
    /**
     * Set Shipping_Method_Reference value
     * @param \StructType\Shipping_MethodObjectType $shipping_Method_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShipping_Method_Reference(\StructType\Shipping_MethodObjectType $shipping_Method_Reference = null)
    {
        $this->Shipping_Method_Reference = $shipping_Method_Reference;
        return $this;
    }
    /**
     * Get Shipping_Instruction value
     * @return string|null
     */
    public function getShipping_Instruction()
    {
        return $this->Shipping_Instruction;
    }
    /**
     * Set Shipping_Instruction value
     * @param string $shipping_Instruction
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShipping_Instruction($shipping_Instruction = null)
    {
        // validation for constraint: string
        if (!is_null($shipping_Instruction) && !is_string($shipping_Instruction)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($shipping_Instruction, true), gettype($shipping_Instruction)), __LINE__);
        }
        $this->Shipping_Instruction = $shipping_Instruction;
        return $this;
    }
    /**
     * Get Due_Date value
     * @return string|null
     */
    public function getDue_Date()
    {
        return $this->Due_Date;
    }
    /**
     * Set Due_Date value
     * @param string $due_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDue_Date($due_Date = null)
    {
        // validation for constraint: string
        if (!is_null($due_Date) && !is_string($due_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($due_Date, true), gettype($due_Date)), __LINE__);
        }
        $this->Due_Date = $due_Date;
        return $this;
    }
    /**
     * Get Supplier_Contract_Reference value
     * @return \StructType\Supplier_Contract_BaseObjectType|null
     */
    public function getSupplier_Contract_Reference()
    {
        return $this->Supplier_Contract_Reference;
    }
    /**
     * Set Supplier_Contract_Reference value
     * @param \StructType\Supplier_Contract_BaseObjectType $supplier_Contract_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setSupplier_Contract_Reference(\StructType\Supplier_Contract_BaseObjectType $supplier_Contract_Reference = null)
    {
        $this->Supplier_Contract_Reference = $supplier_Contract_Reference;
        return $this;
    }
    /**
     * Get Currency_Reference value
     * @return \StructType\CurrencyObjectType|null
     */
    public function getCurrency_Reference()
    {
        return $this->Currency_Reference;
    }
    /**
     * Set Currency_Reference value
     * @param \StructType\CurrencyObjectType $currency_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setCurrency_Reference(\StructType\CurrencyObjectType $currency_Reference = null)
    {
        $this->Currency_Reference = $currency_Reference;
        return $this;
    }
    /**
     * Get Acknowledgement_Expected value
     * @return bool|null
     */
    public function getAcknowledgement_Expected()
    {
        return $this->Acknowledgement_Expected;
    }
    /**
     * Set Acknowledgement_Expected value
     * @param bool $acknowledgement_Expected
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setAcknowledgement_Expected($acknowledgement_Expected = null)
    {
        // validation for constraint: boolean
        if (!is_null($acknowledgement_Expected) && !is_bool($acknowledgement_Expected)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($acknowledgement_Expected, true), gettype($acknowledgement_Expected)), __LINE__);
        }
        $this->Acknowledgement_Expected = $acknowledgement_Expected;
        return $this;
    }
    /**
     * Get Default_Tax_Option_Reference value
     * @return \StructType\Tax_OptionObjectType|null
     */
    public function getDefault_Tax_Option_Reference()
    {
        return $this->Default_Tax_Option_Reference;
    }
    /**
     * Set Default_Tax_Option_Reference value
     * @param \StructType\Tax_OptionObjectType $default_Tax_Option_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDefault_Tax_Option_Reference(\StructType\Tax_OptionObjectType $default_Tax_Option_Reference = null)
    {
        $this->Default_Tax_Option_Reference = $default_Tax_Option_Reference;
        return $this;
    }
    /**
     * Get Default_Tax_Code_Reference value
     * @return \StructType\Tax_CodeObjectType|null
     */
    public function getDefault_Tax_Code_Reference()
    {
        return $this->Default_Tax_Code_Reference;
    }
    /**
     * Set Default_Tax_Code_Reference value
     * @param \StructType\Tax_CodeObjectType $default_Tax_Code_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDefault_Tax_Code_Reference(\StructType\Tax_CodeObjectType $default_Tax_Code_Reference = null)
    {
        $this->Default_Tax_Code_Reference = $default_Tax_Code_Reference;
        return $this;
    }
    /**
     * Get Issue_Option_Reference value
     * @return \StructType\Purchase_Order_Issue_OptionObjectType|null
     */
    public function getIssue_Option_Reference()
    {
        return $this->Issue_Option_Reference;
    }
    /**
     * Set Issue_Option_Reference value
     * @param \StructType\Purchase_Order_Issue_OptionObjectType $issue_Option_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setIssue_Option_Reference(\StructType\Purchase_Order_Issue_OptionObjectType $issue_Option_Reference = null)
    {
        $this->Issue_Option_Reference = $issue_Option_Reference;
        return $this;
    }
    /**
     * Get Purchase_Order_Issue_Email_Data value
     * @return \StructType\Default_PO_Issue_Email_DataType[]|null
     */
    public function getPurchase_Order_Issue_Email_Data()
    {
        return $this->Purchase_Order_Issue_Email_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setPurchase_Order_Issue_Email_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPurchase_Order_Issue_Email_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePurchase_Order_Issue_Email_DataForArrayConstraintsFromSetPurchase_Order_Issue_Email_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem instanceof \StructType\Default_PO_Issue_Email_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem) ? get_class($purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem), var_export($purchase_Order_WWS_DataTypePurchase_Order_Issue_Email_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Purchase_Order_Issue_Email_Data property can only contain items of type \StructType\Default_PO_Issue_Email_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Purchase_Order_Issue_Email_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Default_PO_Issue_Email_DataType[] $purchase_Order_Issue_Email_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPurchase_Order_Issue_Email_Data(array $purchase_Order_Issue_Email_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($purchase_Order_Issue_Email_DataArrayErrorMessage = self::validatePurchase_Order_Issue_Email_DataForArrayConstraintsFromSetPurchase_Order_Issue_Email_Data($purchase_Order_Issue_Email_Data))) {
            throw new \InvalidArgumentException($purchase_Order_Issue_Email_DataArrayErrorMessage, __LINE__);
        }
        $this->Purchase_Order_Issue_Email_Data = $purchase_Order_Issue_Email_Data;
        return $this;
    }
    /**
     * Add item to Purchase_Order_Issue_Email_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Default_PO_Issue_Email_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToPurchase_Order_Issue_Email_Data(\StructType\Default_PO_Issue_Email_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Default_PO_Issue_Email_DataType) {
            throw new \InvalidArgumentException(sprintf('The Purchase_Order_Issue_Email_Data property can only contain items of type \StructType\Default_PO_Issue_Email_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Purchase_Order_Issue_Email_Data[] = $item;
        return $this;
    }
    /**
     * Get Buyer_Reference value
     * @return \StructType\WorkerObjectType|null
     */
    public function getBuyer_Reference()
    {
        return $this->Buyer_Reference;
    }
    /**
     * Set Buyer_Reference value
     * @param \StructType\WorkerObjectType $buyer_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setBuyer_Reference(\StructType\WorkerObjectType $buyer_Reference = null)
    {
        $this->Buyer_Reference = $buyer_Reference;
        return $this;
    }
    /**
     * Get Bill_To_Contact_Reference value
     * @return \StructType\WorkerObjectType|null
     */
    public function getBill_To_Contact_Reference()
    {
        return $this->Bill_To_Contact_Reference;
    }
    /**
     * Set Bill_To_Contact_Reference value
     * @param \StructType\WorkerObjectType $bill_To_Contact_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setBill_To_Contact_Reference(\StructType\WorkerObjectType $bill_To_Contact_Reference = null)
    {
        $this->Bill_To_Contact_Reference = $bill_To_Contact_Reference;
        return $this;
    }
    /**
     * Get Bill_To_Contact_Detail value
     * @return string|null
     */
    public function getBill_To_Contact_Detail()
    {
        return $this->Bill_To_Contact_Detail;
    }
    /**
     * Set Bill_To_Contact_Detail value
     * @param string $bill_To_Contact_Detail
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setBill_To_Contact_Detail($bill_To_Contact_Detail = null)
    {
        // validation for constraint: string
        if (!is_null($bill_To_Contact_Detail) && !is_string($bill_To_Contact_Detail)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($bill_To_Contact_Detail, true), gettype($bill_To_Contact_Detail)), __LINE__);
        }
        $this->Bill_To_Contact_Detail = $bill_To_Contact_Detail;
        return $this;
    }
    /**
     * Get Bill_To_Address_Data value
     * @return \StructType\Bill_To_Address_ReferenceType|null
     */
    public function getBill_To_Address_Data()
    {
        return $this->Bill_To_Address_Data;
    }
    /**
     * Set Bill_To_Address_Data value
     * @param \StructType\Bill_To_Address_ReferenceType $bill_To_Address_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setBill_To_Address_Data(\StructType\Bill_To_Address_ReferenceType $bill_To_Address_Data = null)
    {
        $this->Bill_To_Address_Data = $bill_To_Address_Data;
        return $this;
    }
    /**
     * Get Ship_To_Contact_Reference value
     * @return \StructType\WorkerObjectType|null
     */
    public function getShip_To_Contact_Reference()
    {
        return $this->Ship_To_Contact_Reference;
    }
    /**
     * Set Ship_To_Contact_Reference value
     * @param \StructType\WorkerObjectType $ship_To_Contact_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShip_To_Contact_Reference(\StructType\WorkerObjectType $ship_To_Contact_Reference = null)
    {
        $this->Ship_To_Contact_Reference = $ship_To_Contact_Reference;
        return $this;
    }
    /**
     * Get Ship_To_Contact_Detail value
     * @return string|null
     */
    public function getShip_To_Contact_Detail()
    {
        return $this->Ship_To_Contact_Detail;
    }
    /**
     * Set Ship_To_Contact_Detail value
     * @param string $ship_To_Contact_Detail
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShip_To_Contact_Detail($ship_To_Contact_Detail = null)
    {
        // validation for constraint: string
        if (!is_null($ship_To_Contact_Detail) && !is_string($ship_To_Contact_Detail)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($ship_To_Contact_Detail, true), gettype($ship_To_Contact_Detail)), __LINE__);
        }
        $this->Ship_To_Contact_Detail = $ship_To_Contact_Detail;
        return $this;
    }
    /**
     * Get Ship_To_Address_Data value
     * @return \StructType\Ship_To_Address_ReferenceType|null
     */
    public function getShip_To_Address_Data()
    {
        return $this->Ship_To_Address_Data;
    }
    /**
     * Set Ship_To_Address_Data value
     * @param \StructType\Ship_To_Address_ReferenceType $ship_To_Address_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setShip_To_Address_Data(\StructType\Ship_To_Address_ReferenceType $ship_To_Address_Data = null)
    {
        $this->Ship_To_Address_Data = $ship_To_Address_Data;
        return $this;
    }
    /**
     * Get Document_Link value
     * @return string|null
     */
    public function getDocument_Link()
    {
        return $this->Document_Link;
    }
    /**
     * Set Document_Link value
     * @param string $document_Link
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDocument_Link($document_Link = null)
    {
        // validation for constraint: string
        if (!is_null($document_Link) && !is_string($document_Link)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($document_Link, true), gettype($document_Link)), __LINE__);
        }
        $this->Document_Link = $document_Link;
        return $this;
    }
    /**
     * Get Memo value
     * @return string|null
     */
    public function getMemo()
    {
        return $this->Memo;
    }
    /**
     * Set Memo value
     * @param string $memo
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setMemo($memo = null)
    {
        // validation for constraint: string
        if (!is_null($memo) && !is_string($memo)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($memo, true), gettype($memo)), __LINE__);
        }
        $this->Memo = $memo;
        return $this;
    }
    /**
     * Get Internal_Memo value
     * @return string|null
     */
    public function getInternal_Memo()
    {
        return $this->Internal_Memo;
    }
    /**
     * Set Internal_Memo value
     * @param string $internal_Memo
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setInternal_Memo($internal_Memo = null)
    {
        // validation for constraint: string
        if (!is_null($internal_Memo) && !is_string($internal_Memo)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($internal_Memo, true), gettype($internal_Memo)), __LINE__);
        }
        $this->Internal_Memo = $internal_Memo;
        return $this;
    }
    /**
     * Get Prepaid value
     * @return bool|null
     */
    public function getPrepaid()
    {
        return $this->Prepaid;
    }
    /**
     * Set Prepaid value
     * @param bool $prepaid
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPrepaid($prepaid = null)
    {
        // validation for constraint: boolean
        if (!is_null($prepaid) && !is_bool($prepaid)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($prepaid, true), gettype($prepaid)), __LINE__);
        }
        $this->Prepaid = $prepaid;
        return $this;
    }
    /**
     * Get Prepayment_Release_Type_Reference value
     * @return \StructType\Prepaid_Amortization_TypeObjectType|null
     */
    public function getPrepayment_Release_Type_Reference()
    {
        return $this->Prepayment_Release_Type_Reference;
    }
    /**
     * Set Prepayment_Release_Type_Reference value
     * @param \StructType\Prepaid_Amortization_TypeObjectType $prepayment_Release_Type_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPrepayment_Release_Type_Reference(\StructType\Prepaid_Amortization_TypeObjectType $prepayment_Release_Type_Reference = null)
    {
        $this->Prepayment_Release_Type_Reference = $prepayment_Release_Type_Reference;
        return $this;
    }
    /**
     * Get Expected_Release_Date value
     * @return string|null
     */
    public function getExpected_Release_Date()
    {
        return $this->Expected_Release_Date;
    }
    /**
     * Set Expected_Release_Date value
     * @param string $expected_Release_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setExpected_Release_Date($expected_Release_Date = null)
    {
        // validation for constraint: string
        if (!is_null($expected_Release_Date) && !is_string($expected_Release_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($expected_Release_Date, true), gettype($expected_Release_Date)), __LINE__);
        }
        $this->Expected_Release_Date = $expected_Release_Date;
        return $this;
    }
    /**
     * Get Frequency_Reference value
     * @return \StructType\Frequency_BehaviorObjectType|null
     */
    public function getFrequency_Reference()
    {
        return $this->Frequency_Reference;
    }
    /**
     * Set Frequency_Reference value
     * @param \StructType\Frequency_BehaviorObjectType $frequency_Reference
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setFrequency_Reference(\StructType\Frequency_BehaviorObjectType $frequency_Reference = null)
    {
        $this->Frequency_Reference = $frequency_Reference;
        return $this;
    }
    /**
     * Get Number_of_Prepayment_Installments value
     * @return float|null
     */
    public function getNumber_of_Prepayment_Installments()
    {
        return $this->Number_of_Prepayment_Installments;
    }
    /**
     * Set Number_of_Prepayment_Installments value
     * @param float $number_of_Prepayment_Installments
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setNumber_of_Prepayment_Installments($number_of_Prepayment_Installments = null)
    {
        // validation for constraint: float
        if (!is_null($number_of_Prepayment_Installments) && !(is_float($number_of_Prepayment_Installments) || is_numeric($number_of_Prepayment_Installments))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($number_of_Prepayment_Installments, true), gettype($number_of_Prepayment_Installments)), __LINE__);
        }
        // validation for constraint: fractionDigits
        if (!is_null($number_of_Prepayment_Installments) && mb_strlen(mb_substr($number_of_Prepayment_Installments, false !== mb_strpos($number_of_Prepayment_Installments, '.') ? mb_strpos($number_of_Prepayment_Installments, '.') + 1 : mb_strlen($number_of_Prepayment_Installments))) > 0) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 0 fraction digits, %d given', var_export($number_of_Prepayment_Installments, true), mb_strlen(mb_substr($number_of_Prepayment_Installments, mb_strpos($number_of_Prepayment_Installments, '.') + 1))), __LINE__);
        }
        // validation for constraint: minInclusive
        if (!is_null($number_of_Prepayment_Installments) && $number_of_Prepayment_Installments < 0) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must be numerically greater than or equal to 0', var_export($number_of_Prepayment_Installments, true)), __LINE__);
        }
        // validation for constraint: totalDigits(12)
        if (!is_null($number_of_Prepayment_Installments) && mb_strlen(preg_replace('/(\D)/', '', $number_of_Prepayment_Installments)) > 12) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 12 digits, "%d" given', var_export($number_of_Prepayment_Installments, true), mb_strlen(preg_replace('/(\D)/', '', $number_of_Prepayment_Installments))), __LINE__);
        }
        $this->Number_of_Prepayment_Installments = $number_of_Prepayment_Installments;
        return $this;
    }
    /**
     * Get Use_Invoice_Date value
     * @return bool|null
     */
    public function getUse_Invoice_Date()
    {
        return $this->Use_Invoice_Date;
    }
    /**
     * Set Use_Invoice_Date value
     * @param bool $use_Invoice_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setUse_Invoice_Date($use_Invoice_Date = null)
    {
        // validation for constraint: boolean
        if (!is_null($use_Invoice_Date) && !is_bool($use_Invoice_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($use_Invoice_Date, true), gettype($use_Invoice_Date)), __LINE__);
        }
        $this->Use_Invoice_Date = $use_Invoice_Date;
        return $this;
    }
    /**
     * Get Specified_Date value
     * @return string|null
     */
    public function getSpecified_Date()
    {
        return $this->Specified_Date;
    }
    /**
     * Set Specified_Date value
     * @param string $specified_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setSpecified_Date($specified_Date = null)
    {
        // validation for constraint: string
        if (!is_null($specified_Date) && !is_string($specified_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($specified_Date, true), gettype($specified_Date)), __LINE__);
        }
        $this->Specified_Date = $specified_Date;
        return $this;
    }
    /**
     * Get Use_Prepaid_Posting_Rules_for_Receipt_Accruals value
     * @return bool|null
     */
    public function getUse_Prepaid_Posting_Rules_for_Receipt_Accruals()
    {
        return $this->Use_Prepaid_Posting_Rules_for_Receipt_Accruals;
    }
    /**
     * Set Use_Prepaid_Posting_Rules_for_Receipt_Accruals value
     * @param bool $use_Prepaid_Posting_Rules_for_Receipt_Accruals
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setUse_Prepaid_Posting_Rules_for_Receipt_Accruals($use_Prepaid_Posting_Rules_for_Receipt_Accruals = null)
    {
        // validation for constraint: boolean
        if (!is_null($use_Prepaid_Posting_Rules_for_Receipt_Accruals) && !is_bool($use_Prepaid_Posting_Rules_for_Receipt_Accruals)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($use_Prepaid_Posting_Rules_for_Receipt_Accruals, true), gettype($use_Prepaid_Posting_Rules_for_Receipt_Accruals)), __LINE__);
        }
        $this->Use_Prepaid_Posting_Rules_for_Receipt_Accruals = $use_Prepaid_Posting_Rules_for_Receipt_Accruals;
        return $this;
    }
    /**
     * Get Percent_to_Retain value
     * @return float|null
     */
    public function getPercent_to_Retain()
    {
        return $this->Percent_to_Retain;
    }
    /**
     * Set Percent_to_Retain value
     * @param float $percent_to_Retain
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPercent_to_Retain($percent_to_Retain = null)
    {
        // validation for constraint: float
        if (!is_null($percent_to_Retain) && !(is_float($percent_to_Retain) || is_numeric($percent_to_Retain))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($percent_to_Retain, true), gettype($percent_to_Retain)), __LINE__);
        }
        // validation for constraint: fractionDigits(6)
        if (!is_null($percent_to_Retain) && mb_strlen(mb_substr($percent_to_Retain, false !== mb_strpos($percent_to_Retain, '.') ? mb_strpos($percent_to_Retain, '.') + 1 : mb_strlen($percent_to_Retain))) > 6) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 6 fraction digits, %d given', var_export($percent_to_Retain, true), mb_strlen(mb_substr($percent_to_Retain, mb_strpos($percent_to_Retain, '.') + 1))), __LINE__);
        }
        // validation for constraint: minInclusive
        if (!is_null($percent_to_Retain) && $percent_to_Retain < 0) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must be numerically greater than or equal to 0', var_export($percent_to_Retain, true)), __LINE__);
        }
        // validation for constraint: totalDigits(12)
        if (!is_null($percent_to_Retain) && mb_strlen(preg_replace('/(\D)/', '', $percent_to_Retain)) > 12) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 12 digits, "%d" given', var_export($percent_to_Retain, true), mb_strlen(preg_replace('/(\D)/', '', $percent_to_Retain))), __LINE__);
        }
        $this->Percent_to_Retain = $percent_to_Retain;
        return $this;
    }
    /**
     * Get Estimated_Retention_Release_Date value
     * @return string|null
     */
    public function getEstimated_Retention_Release_Date()
    {
        return $this->Estimated_Retention_Release_Date;
    }
    /**
     * Set Estimated_Retention_Release_Date value
     * @param string $estimated_Retention_Release_Date
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setEstimated_Retention_Release_Date($estimated_Retention_Release_Date = null)
    {
        // validation for constraint: string
        if (!is_null($estimated_Retention_Release_Date) && !is_string($estimated_Retention_Release_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($estimated_Retention_Release_Date, true), gettype($estimated_Retention_Release_Date)), __LINE__);
        }
        $this->Estimated_Retention_Release_Date = $estimated_Retention_Release_Date;
        return $this;
    }
    /**
     * Get xMLNAMErd_Party_Retention value
     * @return xMLNAMErd_Party_Retention
     */
    public function getXMLNAME_3rd_Party_Retention()
    {
        return $this->XMLNAME_3rd_Party_Retention;
    }
    /**
     * Set xMLNAMErd_Party_Retention value
     * @param xMLNAMErd_Party_Retention $xMLNAMErd_Party_Retention
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setXMLNAME_3rd_Party_Retention($xMLNAME_3rd_Party_Retention = null)
    {
        // validation for constraint: boolean
        if (!is_null($xMLNAME_3rd_Party_Retention) && !is_bool($xMLNAME_3rd_Party_Retention)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($xMLNAME_3rd_Party_Retention, true), gettype($xMLNAME_3rd_Party_Retention)), __LINE__);
        }
        $this->XMLNAME_3rd_Party_Retention = $xMLNAME_3rd_Party_Retention;
        return $this;
    }
    /**
     * Get Retention_Memo value
     * @return string|null
     */
    public function getRetention_Memo()
    {
        return $this->Retention_Memo;
    }
    /**
     * Set Retention_Memo value
     * @param string $retention_Memo
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setRetention_Memo($retention_Memo = null)
    {
        // validation for constraint: string
        if (!is_null($retention_Memo) && !is_string($retention_Memo)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($retention_Memo, true), gettype($retention_Memo)), __LINE__);
        }
        $this->Retention_Memo = $retention_Memo;
        return $this;
    }
    /**
     * Get Procedure_Information_Data value
     * @return \StructType\Procedure_Information_DataType|null
     */
    public function getProcedure_Information_Data()
    {
        return $this->Procedure_Information_Data;
    }
    /**
     * Set Procedure_Information_Data value
     * @param \StructType\Procedure_Information_DataType $procedure_Information_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setProcedure_Information_Data(\StructType\Procedure_Information_DataType $procedure_Information_Data = null)
    {
        $this->Procedure_Information_Data = $procedure_Information_Data;
        return $this;
    }
    /**
     * Get Goods_Line_Replacement_Data value
     * @return \StructType\Item_Order_Line_Replacement_DataType[]|null
     */
    public function getGoods_Line_Replacement_Data()
    {
        return $this->Goods_Line_Replacement_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setGoods_Line_Replacement_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setGoods_Line_Replacement_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateGoods_Line_Replacement_DataForArrayConstraintsFromSetGoods_Line_Replacement_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem instanceof \StructType\Item_Order_Line_Replacement_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem) ? get_class($purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem), var_export($purchase_Order_WWS_DataTypeGoods_Line_Replacement_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Goods_Line_Replacement_Data property can only contain items of type \StructType\Item_Order_Line_Replacement_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Goods_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Item_Order_Line_Replacement_DataType[] $goods_Line_Replacement_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setGoods_Line_Replacement_Data(array $goods_Line_Replacement_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($goods_Line_Replacement_DataArrayErrorMessage = self::validateGoods_Line_Replacement_DataForArrayConstraintsFromSetGoods_Line_Replacement_Data($goods_Line_Replacement_Data))) {
            throw new \InvalidArgumentException($goods_Line_Replacement_DataArrayErrorMessage, __LINE__);
        }
        $this->Goods_Line_Replacement_Data = $goods_Line_Replacement_Data;
        return $this;
    }
    /**
     * Add item to Goods_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Item_Order_Line_Replacement_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToGoods_Line_Replacement_Data(\StructType\Item_Order_Line_Replacement_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Item_Order_Line_Replacement_DataType) {
            throw new \InvalidArgumentException(sprintf('The Goods_Line_Replacement_Data property can only contain items of type \StructType\Item_Order_Line_Replacement_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Goods_Line_Replacement_Data[] = $item;
        return $this;
    }
    /**
     * Get Service_Line_Replacement_Data value
     * @return \StructType\Service_Order_Line_Replacement_DataType[]|null
     */
    public function getService_Line_Replacement_Data()
    {
        return $this->Service_Line_Replacement_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setService_Line_Replacement_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setService_Line_Replacement_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateService_Line_Replacement_DataForArrayConstraintsFromSetService_Line_Replacement_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem instanceof \StructType\Service_Order_Line_Replacement_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem) ? get_class($purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem), var_export($purchase_Order_WWS_DataTypeService_Line_Replacement_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Service_Line_Replacement_Data property can only contain items of type \StructType\Service_Order_Line_Replacement_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Service_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Service_Order_Line_Replacement_DataType[] $service_Line_Replacement_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setService_Line_Replacement_Data(array $service_Line_Replacement_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($service_Line_Replacement_DataArrayErrorMessage = self::validateService_Line_Replacement_DataForArrayConstraintsFromSetService_Line_Replacement_Data($service_Line_Replacement_Data))) {
            throw new \InvalidArgumentException($service_Line_Replacement_DataArrayErrorMessage, __LINE__);
        }
        $this->Service_Line_Replacement_Data = $service_Line_Replacement_Data;
        return $this;
    }
    /**
     * Add item to Service_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Service_Order_Line_Replacement_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToService_Line_Replacement_Data(\StructType\Service_Order_Line_Replacement_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Service_Order_Line_Replacement_DataType) {
            throw new \InvalidArgumentException(sprintf('The Service_Line_Replacement_Data property can only contain items of type \StructType\Service_Order_Line_Replacement_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Service_Line_Replacement_Data[] = $item;
        return $this;
    }
    /**
     * Get Deliverables_Line_Replacement_Data value
     * @return \StructType\Project_Based_Order_Line_Replacement_DataType[]|null
     */
    public function getDeliverables_Line_Replacement_Data()
    {
        return $this->Deliverables_Line_Replacement_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setDeliverables_Line_Replacement_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setDeliverables_Line_Replacement_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateDeliverables_Line_Replacement_DataForArrayConstraintsFromSetDeliverables_Line_Replacement_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem instanceof \StructType\Project_Based_Order_Line_Replacement_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem) ? get_class($purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem), var_export($purchase_Order_WWS_DataTypeDeliverables_Line_Replacement_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Deliverables_Line_Replacement_Data property can only contain items of type \StructType\Project_Based_Order_Line_Replacement_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Deliverables_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Project_Based_Order_Line_Replacement_DataType[] $deliverables_Line_Replacement_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setDeliverables_Line_Replacement_Data(array $deliverables_Line_Replacement_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($deliverables_Line_Replacement_DataArrayErrorMessage = self::validateDeliverables_Line_Replacement_DataForArrayConstraintsFromSetDeliverables_Line_Replacement_Data($deliverables_Line_Replacement_Data))) {
            throw new \InvalidArgumentException($deliverables_Line_Replacement_DataArrayErrorMessage, __LINE__);
        }
        $this->Deliverables_Line_Replacement_Data = $deliverables_Line_Replacement_Data;
        return $this;
    }
    /**
     * Add item to Deliverables_Line_Replacement_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Project_Based_Order_Line_Replacement_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToDeliverables_Line_Replacement_Data(\StructType\Project_Based_Order_Line_Replacement_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Project_Based_Order_Line_Replacement_DataType) {
            throw new \InvalidArgumentException(sprintf('The Deliverables_Line_Replacement_Data property can only contain items of type \StructType\Project_Based_Order_Line_Replacement_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Deliverables_Line_Replacement_Data[] = $item;
        return $this;
    }
    /**
     * Get Tax_Code_Data value
     * @return \StructType\Taxable_Code_Application_NO_INPUT_DataType[]|null
     */
    public function getTax_Code_Data()
    {
        return $this->Tax_Code_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setTax_Code_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setTax_Code_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTax_Code_DataForArrayConstraintsFromSetTax_Code_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypeTax_Code_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypeTax_Code_DataItem instanceof \StructType\Taxable_Code_Application_NO_INPUT_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypeTax_Code_DataItem) ? get_class($purchase_Order_WWS_DataTypeTax_Code_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypeTax_Code_DataItem), var_export($purchase_Order_WWS_DataTypeTax_Code_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Tax_Code_Data property can only contain items of type \StructType\Taxable_Code_Application_NO_INPUT_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Tax_Code_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Taxable_Code_Application_NO_INPUT_DataType[] $tax_Code_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setTax_Code_Data(array $tax_Code_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($tax_Code_DataArrayErrorMessage = self::validateTax_Code_DataForArrayConstraintsFromSetTax_Code_Data($tax_Code_Data))) {
            throw new \InvalidArgumentException($tax_Code_DataArrayErrorMessage, __LINE__);
        }
        $this->Tax_Code_Data = $tax_Code_Data;
        return $this;
    }
    /**
     * Add item to Tax_Code_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Taxable_Code_Application_NO_INPUT_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToTax_Code_Data(\StructType\Taxable_Code_Application_NO_INPUT_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Taxable_Code_Application_NO_INPUT_DataType) {
            throw new \InvalidArgumentException(sprintf('The Tax_Code_Data property can only contain items of type \StructType\Taxable_Code_Application_NO_INPUT_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Tax_Code_Data[] = $item;
        return $this;
    }
    /**
     * Get Attachment_Data value
     * @return \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType[]|null
     */
    public function getAttachment_Data()
    {
        return $this->Attachment_Data;
    }
    /**
     * This method is responsible for validating the values passed to the setAttachment_Data method
     * This method is willingly generated in order to preserve the one-line inline validation within the setAttachment_Data method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateAttachment_DataForArrayConstraintsFromSetAttachment_Data(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypeAttachment_DataItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypeAttachment_DataItem instanceof \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypeAttachment_DataItem) ? get_class($purchase_Order_WWS_DataTypeAttachment_DataItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypeAttachment_DataItem), var_export($purchase_Order_WWS_DataTypeAttachment_DataItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Attachment_Data property can only contain items of type \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Attachment_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType[] $attachment_Data
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setAttachment_Data(array $attachment_Data = array())
    {
        // validation for constraint: array
        if ('' !== ($attachment_DataArrayErrorMessage = self::validateAttachment_DataForArrayConstraintsFromSetAttachment_Data($attachment_Data))) {
            throw new \InvalidArgumentException($attachment_DataArrayErrorMessage, __LINE__);
        }
        $this->Attachment_Data = $attachment_Data;
        return $this;
    }
    /**
     * Add item to Attachment_Data value
     * @throws \InvalidArgumentException
     * @param \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToAttachment_Data(\StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType) {
            throw new \InvalidArgumentException(sprintf('The Attachment_Data property can only contain items of type \StructType\Business_Document_Attachment_with_External_Option_And_Attachment_Category_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Attachment_Data[] = $item;
        return $this;
    }
    /**
     * Get Purchase_Order_Prepaid_Spend_Amortization_Schedule value
     * @return \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType[]|null
     */
    public function getPurchase_Order_Prepaid_Spend_Amortization_Schedule()
    {
        return $this->Purchase_Order_Prepaid_Spend_Amortization_Schedule;
    }
    /**
     * This method is responsible for validating the values passed to the setPurchase_Order_Prepaid_Spend_Amortization_Schedule method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPurchase_Order_Prepaid_Spend_Amortization_Schedule method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePurchase_Order_Prepaid_Spend_Amortization_ScheduleForArrayConstraintsFromSetPurchase_Order_Prepaid_Spend_Amortization_Schedule(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem) {
            // validation for constraint: itemType
            if (!$purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem instanceof \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType) {
                $invalidValues[] = is_object($purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem) ? get_class($purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem) : sprintf('%s(%s)', gettype($purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem), var_export($purchase_Order_WWS_DataTypePurchase_Order_Prepaid_Spend_Amortization_ScheduleItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Purchase_Order_Prepaid_Spend_Amortization_Schedule property can only contain items of type \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Purchase_Order_Prepaid_Spend_Amortization_Schedule value
     * @throws \InvalidArgumentException
     * @param \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType[] $purchase_Order_Prepaid_Spend_Amortization_Schedule
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function setPurchase_Order_Prepaid_Spend_Amortization_Schedule(array $purchase_Order_Prepaid_Spend_Amortization_Schedule = array())
    {
        // validation for constraint: array
        if ('' !== ($purchase_Order_Prepaid_Spend_Amortization_ScheduleArrayErrorMessage = self::validatePurchase_Order_Prepaid_Spend_Amortization_ScheduleForArrayConstraintsFromSetPurchase_Order_Prepaid_Spend_Amortization_Schedule($purchase_Order_Prepaid_Spend_Amortization_Schedule))) {
            throw new \InvalidArgumentException($purchase_Order_Prepaid_Spend_Amortization_ScheduleArrayErrorMessage, __LINE__);
        }
        $this->Purchase_Order_Prepaid_Spend_Amortization_Schedule = $purchase_Order_Prepaid_Spend_Amortization_Schedule;
        return $this;
    }
    /**
     * Add item to Purchase_Order_Prepaid_Spend_Amortization_Schedule value
     * @throws \InvalidArgumentException
     * @param \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType $item
     * @return \StructType\Purchase_Order_WWS_DataType
     */
    public function addToPurchase_Order_Prepaid_Spend_Amortization_Schedule(\StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType) {
            throw new \InvalidArgumentException(sprintf('The Purchase_Order_Prepaid_Spend_Amortization_Schedule property can only contain items of type \StructType\PO_Prepaid_Amortization_Schedule_WWS_DataType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Purchase_Order_Prepaid_Spend_Amortization_Schedule[] = $item;
        return $this;
    }
}
