001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.order.server.graphql; 018 019import com.echothree.model.control.cancellationpolicy.server.graphql.CancellationPolicyObject; 020import com.echothree.model.control.cancellationpolicy.server.graphql.CancellationPolicySecurityUtils; 021import com.echothree.model.control.graphql.server.graphql.BaseEntityInstanceObject; 022import com.echothree.model.control.inventory.server.graphql.InventoryConditionObject; 023import com.echothree.model.control.inventory.server.graphql.InventorySecurityUtils; 024import com.echothree.model.control.item.server.graphql.ItemObject; 025import com.echothree.model.control.item.server.graphql.ItemSecurityUtils; 026import com.echothree.model.control.returnpolicy.server.graphql.ReturnPolicyObject; 027import com.echothree.model.control.returnpolicy.server.graphql.ReturnPolicySecurityUtils; 028import com.echothree.model.control.uom.server.graphql.UnitOfMeasureTypeObject; 029import com.echothree.model.control.uom.server.graphql.UomSecurityUtils; 030import com.echothree.model.data.order.server.entity.OrderLine; 031import com.echothree.model.data.order.server.entity.OrderLineDetail; 032import graphql.annotations.annotationTypes.GraphQLDescription; 033import graphql.annotations.annotationTypes.GraphQLField; 034import graphql.schema.DataFetchingEnvironment; 035 036public abstract class BaseOrderLineObject 037 extends BaseEntityInstanceObject { 038 039 private final OrderLine orderLine; // Always Present 040 041 protected BaseOrderLineObject(final OrderLine orderLine) { 042 super(orderLine.getPrimaryKey()); 043 044 this.orderLine = orderLine; 045 } 046 047 private OrderLineDetail orderLineDetail; // Optional, use getOrderDetail() 048 049 private OrderLineDetail getOrderLineDetail() { 050 if(orderLineDetail == null) { 051 orderLineDetail = orderLine.getLastDetail(); 052 } 053 054 return orderLineDetail; 055 } 056 057 @GraphQLField 058 @GraphQLDescription("order line sequence") 059 public Integer getOrderLineSequence() { 060 return getOrderLineDetail().getOrderLineSequence(); 061 } 062 063 @GraphQLField 064 @GraphQLDescription("parent order line") 065 public OrderLineObject getParentOrderLine(final DataFetchingEnvironment env) { 066 var parentOrderLine = getOrderLineDetail().getParentOrderLine(); 067 068 return parentOrderLine == null ? null : new OrderLineObject(parentOrderLine); 069 } 070 071 // TODO: Order Shipment Group 072 073 @GraphQLField 074 @GraphQLDescription("item") 075 public ItemObject getItem(final DataFetchingEnvironment env) { 076 return ItemSecurityUtils.getHasItemAccess(env) ? new ItemObject(getOrderLineDetail().getItem()) : null; 077 } 078 079 @GraphQLField 080 @GraphQLDescription("inventory condition") 081 public InventoryConditionObject getInventoryCondition(final DataFetchingEnvironment env) { 082 return InventorySecurityUtils.getHasInventoryConditionAccess(env) ? new InventoryConditionObject(getOrderLineDetail().getInventoryCondition()) : null; 083 } 084 085 @GraphQLField 086 @GraphQLDescription("unit of measure type") 087 public UnitOfMeasureTypeObject getUnitOfMeasureType(final DataFetchingEnvironment env) { 088 return UomSecurityUtils.getHasUnitOfMeasureTypeAccess(env) ? new UnitOfMeasureTypeObject(getOrderLineDetail().getUnitOfMeasureType()) : null; 089 } 090 091 @GraphQLField 092 @GraphQLDescription("quantity") 093 public Long getQuantity() { 094 return getOrderLineDetail().getQuantity(); 095 } 096 097 @GraphQLField 098 @GraphQLDescription("unformattedUnitAmount") 099 public Long getUnformattedUnitAmount(final DataFetchingEnvironment env) { 100 return getOrderLineDetail().getUnitAmount(); 101 } 102 103 // Unit Amount must be formatted in subclass - it could be a Cost or a Price. 104 105 @GraphQLField 106 @GraphQLDescription("description") 107 public String getDescription() { 108 return getOrderLineDetail().getDescription(); 109 } 110 111 @GraphQLField 112 @GraphQLDescription("cancellation policy") 113 public CancellationPolicyObject getCancellationPolicy(final DataFetchingEnvironment env) { 114 var cancellationPolicy = getOrderLineDetail().getCancellationPolicy(); 115 116 return cancellationPolicy == null ? null : CancellationPolicySecurityUtils.getHasCancellationPolicyAccess(env) ? 117 new CancellationPolicyObject(cancellationPolicy) : null; 118 } 119 120 @GraphQLField 121 @GraphQLDescription("return policy") 122 public ReturnPolicyObject getReturnPolicy(final DataFetchingEnvironment env) { 123 var returnPolicy = getOrderLineDetail().getReturnPolicy(); 124 125 return returnPolicy == null ? null : ReturnPolicySecurityUtils.getHasReturnPolicyAccess(env) ? 126 new ReturnPolicyObject(returnPolicy) : null; 127 } 128 129 @GraphQLField 130 @GraphQLDescription("taxable") 131 public Boolean getTaxable() { 132 return getOrderLineDetail().getTaxable(); 133 } 134 135}