diff --git a/docs/QuoteDetailsResponse.md b/docs/QuoteDetailsResponse.md index 69a77c6..dfffb15 100644 --- a/docs/QuoteDetailsResponse.md +++ b/docs/QuoteDetailsResponse.md @@ -17,6 +17,7 @@ Name | Type | Description | Notes **special_bid_effective_date** | **str** | If price discount has been applied to the quote - the starting date the discount begins. | [optional] **special_bid_expiration_date** | **str** | If a price discount has been applied to the quote - The date the discount expires and will no longer be applicable. | [optional] **vendor_quote_number** | **str** | | [optional] +**is_partial_order_allowed** | **bool** | | [optional] **status** | **str** | This refers to the primary status of the quote. API responses will return | [optional] **status_reason** | **str** | | [optional] **closing_reason** | **str** | Closing Reason for quote. | [optional] diff --git a/docs/QuoteDetailsResponseProductsInner.md b/docs/QuoteDetailsResponseProductsInner.md index 7f7a0fd..a210e97 100644 --- a/docs/QuoteDetailsResponseProductsInner.md +++ b/docs/QuoteDetailsResponseProductsInner.md @@ -8,6 +8,8 @@ Name | Type | Description | Notes **quote_product_guid** | **str** | Quote Product GUID is the primary quote key in Ingram Micro's CRM - needed to retrieve quote details. | [optional] **line_number** | **str** | Line number which the product will appear in the quote. Line number is manditory when unique configurations are included in a quote and mainting the item line order is required. | [optional] **quantity** | **int** | Quantity of product line item quoted. | [optional] +**remaining_quote_qty** | **int** | | [optional] +**minimum_order_allowed_qty** | **int** | | [optional] **notes** | **str** | Product line item comments. | [optional] **ean** | **str** | EANUPC | [optional] **coo** | **str** | Country of Origin. | [optional] diff --git a/docs/QuoteDetailsResponseProductsInnerPrice.md b/docs/QuoteDetailsResponseProductsInnerPrice.md index 072144f..a321f0f 100644 --- a/docs/QuoteDetailsResponseProductsInnerPrice.md +++ b/docs/QuoteDetailsResponseProductsInnerPrice.md @@ -9,6 +9,8 @@ Name | Type | Description | Notes **msrp** | **float** | Manufacturer Suggested Retail Price | [optional] **extended_msrp** | **float** | Extended MSRP - Manufacturer Suggested Retail Price X Quantity | [optional] **extended_quote_price** | **float** | Extended reseller quoted price (cost to reseller) X Quantity | [optional] +**remaining_quantity_extended_msrp** | **float** | | [optional] +**remaining_quantity_extended_quote_price** | **float** | | [optional] **discount_off_list** | **str** | Discount off list percentage extended | [optional] **type** | **str** | | [optional] **recurring_price_model** | **str** | | [optional] diff --git a/test/test_quote_details_response.py b/test/test_quote_details_response.py index 3cd6f70..30ada4c 100644 --- a/test/test_quote_details_response.py +++ b/test/test_quote_details_response.py @@ -47,6 +47,7 @@ def make_instance(self, include_optional) -> QuoteDetailsResponse: special_bid_effective_date = '', special_bid_expiration_date = '', vendor_quote_number = '', + is_partial_order_allowed = True, status = '', status_reason = '', closing_reason = '', @@ -96,6 +97,8 @@ def make_instance(self, include_optional) -> QuoteDetailsResponse: quote_product_guid = '', line_number = '', quantity = 56, + remaining_quote_qty = 56, + minimum_order_allowed_qty = 56, notes = '', ean = '', coo = '', @@ -121,6 +124,8 @@ def make_instance(self, include_optional) -> QuoteDetailsResponse: msrp = 1.337, extended_msrp = 1.337, extended_quote_price = 1.337, + remaining_quantity_extended_msrp = 1.337, + remaining_quantity_extended_quote_price = 1.337, discount_off_list = '', type = '', recurring_price_model = '', diff --git a/test/test_quote_details_response_products_inner.py b/test/test_quote_details_response_products_inner.py index 14dc9b0..76bcce3 100644 --- a/test/test_quote_details_response_products_inner.py +++ b/test/test_quote_details_response_products_inner.py @@ -38,6 +38,8 @@ def make_instance(self, include_optional) -> QuoteDetailsResponseProductsInner: quote_product_guid = '', line_number = '', quantity = 56, + remaining_quote_qty = 56, + minimum_order_allowed_qty = 56, notes = '', ean = '', coo = '', @@ -63,6 +65,8 @@ def make_instance(self, include_optional) -> QuoteDetailsResponseProductsInner: msrp = 1.337, extended_msrp = 1.337, extended_quote_price = 1.337, + remaining_quantity_extended_msrp = 1.337, + remaining_quantity_extended_quote_price = 1.337, discount_off_list = '', type = '', recurring_price_model = '', diff --git a/test/test_quote_details_response_products_inner_price.py b/test/test_quote_details_response_products_inner_price.py index 3938064..98eff59 100644 --- a/test/test_quote_details_response_products_inner_price.py +++ b/test/test_quote_details_response_products_inner_price.py @@ -39,6 +39,8 @@ def make_instance(self, include_optional) -> QuoteDetailsResponseProductsInnerPr msrp = 1.337, extended_msrp = 1.337, extended_quote_price = 1.337, + remaining_quantity_extended_msrp = 1.337, + remaining_quantity_extended_quote_price = 1.337, discount_off_list = '', type = '', recurring_price_model = '', diff --git a/xi/sdk/resellers/models/order_detail_b2_b_lines_inner_shipment_details_inner.py b/xi/sdk/resellers/models/order_detail_b2_b_lines_inner_shipment_details_inner.py index dfc0dc3..96f2486 100644 --- a/xi/sdk/resellers/models/order_detail_b2_b_lines_inner_shipment_details_inner.py +++ b/xi/sdk/resellers/models/order_detail_b2_b_lines_inner_shipment_details_inner.py @@ -85,6 +85,11 @@ def to_dict(self) -> Dict[str, Any]: if _item_carrier_details: _items.append(_item_carrier_details.to_dict()) _dict['carrierDetails'] = _items + # set to None if quantity (nullable) is None + # and model_fields_set contains the field + if self.quantity is None and "quantity" in self.model_fields_set: + _dict['quantity'] = None + # set to None if carrier_details (nullable) is None # and model_fields_set contains the field if self.carrier_details is None and "carrier_details" in self.model_fields_set: diff --git a/xi/sdk/resellers/models/quote_details_response.py b/xi/sdk/resellers/models/quote_details_response.py index 80d3ec0..3bbc7ad 100644 --- a/xi/sdk/resellers/models/quote_details_response.py +++ b/xi/sdk/resellers/models/quote_details_response.py @@ -17,7 +17,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional, Union from xi.sdk.resellers.models.quote_details_response_additional_attributes_inner import QuoteDetailsResponseAdditionalAttributesInner from xi.sdk.resellers.models.quote_details_response_end_user_info import QuoteDetailsResponseEndUserInfo @@ -44,6 +44,7 @@ class QuoteDetailsResponse(BaseModel): special_bid_effective_date: Optional[StrictStr] = Field(default=None, description="If price discount has been applied to the quote - the starting date the discount begins.", alias="specialBidEffectiveDate") special_bid_expiration_date: Optional[StrictStr] = Field(default=None, description="If a price discount has been applied to the quote - The date the discount expires and will no longer be applicable.", alias="specialBidExpirationDate") vendor_quote_number: Optional[StrictStr] = Field(default=None, alias="vendorQuoteNumber") + is_partial_order_allowed: Optional[StrictBool] = Field(default=None, alias="isPartialOrderAllowed") status: Optional[StrictStr] = Field(default=None, description="This refers to the primary status of the quote. API responses will return") status_reason: Optional[StrictStr] = Field(default=None, alias="statusReason") closing_reason: Optional[StrictStr] = Field(default=None, description="Closing Reason for quote.", alias="closingReason") @@ -73,7 +74,7 @@ class QuoteDetailsResponse(BaseModel): freight_amount: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="freightAmount") total_quote_amount: Optional[StrictStr] = Field(default=None, alias="totalQuoteAmount") additional_attributes: Optional[List[QuoteDetailsResponseAdditionalAttributesInner]] = Field(default=None, alias="additionalAttributes") - __properties: ClassVar[List[str]] = ["quoteName", "quoteNumber", "quoteGuid", "revision", "ingramQuoteDate", "lastModifiedDate", "ingramQuoteExpiryDate", "currencyCode", "specialBidId", "specialBidEffectiveDate", "specialBidExpirationDate", "vendorQuoteNumber", "status", "statusReason", "closingReason", "dateClosed", "customerNeed", "proposedSolution", "introPreamble", "purchaseInstructions", "legalTerms", "quoteType", "leaseInfo", "leasingInstructions", "imWarehouse", "imWarehouseGstNumber", "paymentTermsName", "resellerInfo", "endUserInfo", "shippingInfo", "products", "productsCount", "extendedMsrpTotal", "quantityTotal", "extraFeesTotal", "extraFeesTotalDetails", "taxTotal", "extendedQuotePriceTotal", "freightAmount", "totalQuoteAmount", "additionalAttributes"] + __properties: ClassVar[List[str]] = ["quoteName", "quoteNumber", "quoteGuid", "revision", "ingramQuoteDate", "lastModifiedDate", "ingramQuoteExpiryDate", "currencyCode", "specialBidId", "specialBidEffectiveDate", "specialBidExpirationDate", "vendorQuoteNumber", "isPartialOrderAllowed", "status", "statusReason", "closingReason", "dateClosed", "customerNeed", "proposedSolution", "introPreamble", "purchaseInstructions", "legalTerms", "quoteType", "leaseInfo", "leasingInstructions", "imWarehouse", "imWarehouseGstNumber", "paymentTermsName", "resellerInfo", "endUserInfo", "shippingInfo", "products", "productsCount", "extendedMsrpTotal", "quantityTotal", "extraFeesTotal", "extraFeesTotalDetails", "taxTotal", "extendedQuotePriceTotal", "freightAmount", "totalQuoteAmount", "additionalAttributes"] model_config = ConfigDict( populate_by_name=True, @@ -144,6 +145,11 @@ def to_dict(self) -> Dict[str, Any]: if _item_additional_attributes: _items.append(_item_additional_attributes.to_dict()) _dict['additionalAttributes'] = _items + # set to None if is_partial_order_allowed (nullable) is None + # and model_fields_set contains the field + if self.is_partial_order_allowed is None and "is_partial_order_allowed" in self.model_fields_set: + _dict['isPartialOrderAllowed'] = None + # set to None if tax_total (nullable) is None # and model_fields_set contains the field if self.tax_total is None and "tax_total" in self.model_fields_set: @@ -178,6 +184,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "specialBidEffectiveDate": obj.get("specialBidEffectiveDate"), "specialBidExpirationDate": obj.get("specialBidExpirationDate"), "vendorQuoteNumber": obj.get("vendorQuoteNumber"), + "isPartialOrderAllowed": obj.get("isPartialOrderAllowed"), "status": obj.get("status"), "statusReason": obj.get("statusReason"), "closingReason": obj.get("closingReason"), diff --git a/xi/sdk/resellers/models/quote_details_response_products_inner.py b/xi/sdk/resellers/models/quote_details_response_products_inner.py index 378f94e..89b58a3 100644 --- a/xi/sdk/resellers/models/quote_details_response_products_inner.py +++ b/xi/sdk/resellers/models/quote_details_response_products_inner.py @@ -31,6 +31,8 @@ class QuoteDetailsResponseProductsInner(BaseModel): quote_product_guid: Optional[StrictStr] = Field(default=None, description="Quote Product GUID is the primary quote key in Ingram Micro's CRM - needed to retrieve quote details.", alias="quoteProductGuid") line_number: Optional[StrictStr] = Field(default=None, description="Line number which the product will appear in the quote. Line number is manditory when unique configurations are included in a quote and mainting the item line order is required.", alias="lineNumber") quantity: Optional[StrictInt] = Field(default=None, description="Quantity of product line item quoted.") + remaining_quote_qty: Optional[StrictInt] = Field(default=None, alias="remainingQuoteQty") + minimum_order_allowed_qty: Optional[StrictInt] = Field(default=None, alias="minimumOrderAllowedQty") notes: Optional[StrictStr] = Field(default=None, description="Product line item comments.") ean: Optional[StrictStr] = Field(default=None, description="EANUPC") coo: Optional[StrictStr] = Field(default=None, description="Country of Origin.") @@ -53,7 +55,7 @@ class QuoteDetailsResponseProductsInner(BaseModel): serial_number: Optional[StrictStr] = Field(default=None, alias="serialNumber") price: Optional[QuoteDetailsResponseProductsInnerPrice] = None bill_details: Optional[List[QuoteDetailsResponseProductsInnerBillDetailsInner]] = Field(default=None, alias="billDetails") - __properties: ClassVar[List[str]] = ["quoteProductGuid", "lineNumber", "quantity", "notes", "ean", "coo", "ingramPartNumber", "vendorPartNumber", "description", "weight", "weightUom", "isSuggestionProduct", "vpnCategory", "quoteProductsSupplierPartAuxiliaryId", "vendorName", "terms", "planDescription", "isSubscription", "resellerMargin", "requestedStartDate", "startDate", "endDate", "serialNumber", "price", "billDetails"] + __properties: ClassVar[List[str]] = ["quoteProductGuid", "lineNumber", "quantity", "remainingQuoteQty", "minimumOrderAllowedQty", "notes", "ean", "coo", "ingramPartNumber", "vendorPartNumber", "description", "weight", "weightUom", "isSuggestionProduct", "vpnCategory", "quoteProductsSupplierPartAuxiliaryId", "vendorName", "terms", "planDescription", "isSubscription", "resellerMargin", "requestedStartDate", "startDate", "endDate", "serialNumber", "price", "billDetails"] model_config = ConfigDict( populate_by_name=True, @@ -104,6 +106,16 @@ def to_dict(self) -> Dict[str, Any]: if _item_bill_details: _items.append(_item_bill_details.to_dict()) _dict['billDetails'] = _items + # set to None if remaining_quote_qty (nullable) is None + # and model_fields_set contains the field + if self.remaining_quote_qty is None and "remaining_quote_qty" in self.model_fields_set: + _dict['remainingQuoteQty'] = None + + # set to None if minimum_order_allowed_qty (nullable) is None + # and model_fields_set contains the field + if self.minimum_order_allowed_qty is None and "minimum_order_allowed_qty" in self.model_fields_set: + _dict['minimumOrderAllowedQty'] = None + return _dict @classmethod @@ -119,6 +131,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "quoteProductGuid": obj.get("quoteProductGuid"), "lineNumber": obj.get("lineNumber"), "quantity": obj.get("quantity"), + "remainingQuoteQty": obj.get("remainingQuoteQty"), + "minimumOrderAllowedQty": obj.get("minimumOrderAllowedQty"), "notes": obj.get("notes"), "ean": obj.get("ean"), "coo": obj.get("coo"), diff --git a/xi/sdk/resellers/models/quote_details_response_products_inner_price.py b/xi/sdk/resellers/models/quote_details_response_products_inner_price.py index 01e0d21..a97cdfd 100644 --- a/xi/sdk/resellers/models/quote_details_response_products_inner_price.py +++ b/xi/sdk/resellers/models/quote_details_response_products_inner_price.py @@ -32,6 +32,8 @@ class QuoteDetailsResponseProductsInnerPrice(BaseModel): msrp: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Manufacturer Suggested Retail Price") extended_msrp: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Extended MSRP - Manufacturer Suggested Retail Price X Quantity", alias="extendedMsrp") extended_quote_price: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Extended reseller quoted price (cost to reseller) X Quantity", alias="extendedQuotePrice") + remaining_quantity_extended_msrp: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="remainingQuantityExtendedMsrp") + remaining_quantity_extended_quote_price: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="remainingQuantityExtendedQuotePrice") discount_off_list: Optional[StrictStr] = Field(default=None, description="Discount off list percentage extended", alias="discountOffList") type: Optional[StrictStr] = None recurring_price_model: Optional[StrictStr] = Field(default=None, alias="recurringPriceModel") @@ -40,7 +42,7 @@ class QuoteDetailsResponseProductsInnerPrice(BaseModel): extrafees: Optional[Union[StrictFloat, StrictInt]] = None extra_fees_details: Optional[List[QuoteDetailsResponseProductsInnerPriceExtraFeesDetailsInner]] = Field(default=None, alias="extraFeesDetails") discounts: Optional[List[QuoteDetailsResponseProductsInnerPriceDiscountsInner]] = None - __properties: ClassVar[List[str]] = ["quotePrice", "msrp", "extendedMsrp", "extendedQuotePrice", "discountOffList", "type", "recurringPriceModel", "unitOfMeasure", "tax", "extrafees", "extraFeesDetails", "discounts"] + __properties: ClassVar[List[str]] = ["quotePrice", "msrp", "extendedMsrp", "extendedQuotePrice", "remainingQuantityExtendedMsrp", "remainingQuantityExtendedQuotePrice", "discountOffList", "type", "recurringPriceModel", "unitOfMeasure", "tax", "extrafees", "extraFeesDetails", "discounts"] model_config = ConfigDict( populate_by_name=True, @@ -95,6 +97,41 @@ def to_dict(self) -> Dict[str, Any]: if _item_discounts: _items.append(_item_discounts.to_dict()) _dict['discounts'] = _items + # set to None if quote_price (nullable) is None + # and model_fields_set contains the field + if self.quote_price is None and "quote_price" in self.model_fields_set: + _dict['quotePrice'] = None + + # set to None if msrp (nullable) is None + # and model_fields_set contains the field + if self.msrp is None and "msrp" in self.model_fields_set: + _dict['msrp'] = None + + # set to None if extended_msrp (nullable) is None + # and model_fields_set contains the field + if self.extended_msrp is None and "extended_msrp" in self.model_fields_set: + _dict['extendedMsrp'] = None + + # set to None if extended_quote_price (nullable) is None + # and model_fields_set contains the field + if self.extended_quote_price is None and "extended_quote_price" in self.model_fields_set: + _dict['extendedQuotePrice'] = None + + # set to None if remaining_quantity_extended_msrp (nullable) is None + # and model_fields_set contains the field + if self.remaining_quantity_extended_msrp is None and "remaining_quantity_extended_msrp" in self.model_fields_set: + _dict['remainingQuantityExtendedMsrp'] = None + + # set to None if remaining_quantity_extended_quote_price (nullable) is None + # and model_fields_set contains the field + if self.remaining_quantity_extended_quote_price is None and "remaining_quantity_extended_quote_price" in self.model_fields_set: + _dict['remainingQuantityExtendedQuotePrice'] = None + + # set to None if discount_off_list (nullable) is None + # and model_fields_set contains the field + if self.discount_off_list is None and "discount_off_list" in self.model_fields_set: + _dict['discountOffList'] = None + # set to None if tax (nullable) is None # and model_fields_set contains the field if self.tax is None and "tax" in self.model_fields_set: @@ -121,6 +158,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "msrp": obj.get("msrp"), "extendedMsrp": obj.get("extendedMsrp"), "extendedQuotePrice": obj.get("extendedQuotePrice"), + "remainingQuantityExtendedMsrp": obj.get("remainingQuantityExtendedMsrp"), + "remainingQuantityExtendedQuotePrice": obj.get("remainingQuantityExtendedQuotePrice"), "discountOffList": obj.get("discountOffList"), "type": obj.get("type"), "recurringPriceModel": obj.get("recurringPriceModel"),