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.item.server.graphql; 018 019import com.echothree.model.control.accounting.server.graphql.AccountingSecurityUtils; 020import com.echothree.model.control.accounting.server.graphql.CurrencyObject; 021import com.echothree.model.control.graphql.server.graphql.BaseObject; 022import com.echothree.model.control.graphql.server.graphql.UnitPriceObject; 023import com.echothree.model.control.inventory.server.graphql.InventoryConditionObject; 024import com.echothree.model.control.inventory.server.graphql.InventorySecurityUtils; 025import com.echothree.model.control.item.common.ItemPriceTypes; 026import com.echothree.model.control.item.server.control.ItemControl; 027import com.echothree.model.control.uom.server.graphql.UnitOfMeasureTypeObject; 028import com.echothree.model.control.uom.server.graphql.UomSecurityUtils; 029import com.echothree.model.data.item.server.entity.ItemFixedPrice; 030import com.echothree.model.data.item.server.entity.ItemPrice; 031import com.echothree.model.data.item.server.entity.ItemVariablePrice; 032import com.echothree.util.server.persistence.Session; 033import graphql.annotations.annotationTypes.GraphQLDescription; 034import graphql.annotations.annotationTypes.GraphQLField; 035import graphql.annotations.annotationTypes.GraphQLName; 036import graphql.schema.DataFetchingEnvironment; 037 038@GraphQLDescription("item price object") 039@GraphQLName("ItemPrice") 040public class ItemPriceObject 041 extends BaseObject { 042 043 private final ItemPrice itemPrice; // Always Present 044 045 public ItemPriceObject(ItemPrice itemPrice) { 046 this.itemPrice = itemPrice; 047 } 048 049 String itemPriceTypeName; 050 051 private String getItemPriceTypeName() { 052 if(itemPriceTypeName == null) { 053 itemPriceTypeName = itemPrice.getItem().getLastDetail().getItemPriceType().getItemPriceTypeName(); 054 } 055 056 return itemPriceTypeName; 057 } 058 059 private ItemFixedPrice itemFixedPrice; 060 061 private ItemFixedPrice getItemFixedPrice() { 062 if(itemFixedPrice == null) { 063 if(getItemPriceTypeName().equals(ItemPriceTypes.FIXED.name())) { 064 var itemControl = Session.getModelController(ItemControl.class); 065 066 itemFixedPrice = itemControl.getItemFixedPrice(itemPrice); 067 } 068 } 069 070 return itemFixedPrice; 071 } 072 073 private ItemVariablePrice itemVariablePrice; 074 075 private ItemVariablePrice getItemVariablePrice() { 076 if(itemVariablePrice == null) { 077 if(getItemPriceTypeName().equals(ItemPriceTypes.VARIABLE.name())) { 078 var itemControl = Session.getModelController(ItemControl.class); 079 080 itemVariablePrice = itemControl.getItemVariablePrice(itemPrice); 081 } 082 } 083 084 return itemVariablePrice; 085 } 086 087 @GraphQLField 088 @GraphQLDescription("item") 089 public ItemObject getItem(final DataFetchingEnvironment env) { 090 return ItemSecurityUtils.getHasItemAccess(env) ? new ItemObject(itemPrice.getItem()) : null; 091 } 092 093 @GraphQLField 094 @GraphQLDescription("inventory condition") 095 public InventoryConditionObject getInventoryCondition(final DataFetchingEnvironment env) { 096 return InventorySecurityUtils.getHasInventoryConditionAccess(env) ? new InventoryConditionObject(itemPrice.getInventoryCondition()) : null; 097 } 098 099 @GraphQLField 100 @GraphQLDescription("unit of measure type") 101 public UnitOfMeasureTypeObject getUnitOfMeasureType(final DataFetchingEnvironment env) { 102 return UomSecurityUtils.getHasUnitOfMeasureTypeAccess(env) ? new UnitOfMeasureTypeObject(itemPrice.getUnitOfMeasureType()) : null; 103 } 104 105 @GraphQLField 106 @GraphQLDescription("currency") 107 public CurrencyObject getCurrency(final DataFetchingEnvironment env) { 108 return AccountingSecurityUtils.getHasCurrencyAccess(env) ? new CurrencyObject(itemPrice.getCurrency()) : null; 109 } 110 111 @GraphQLField 112 @GraphQLDescription("unit price") 113 public UnitPriceObject getUnitPrice() { 114 var itemFixedPrice = getItemFixedPrice().getUnitPrice(); 115 116 return itemFixedPrice == null ? null : new UnitPriceObject(itemPrice.getCurrency(), itemFixedPrice); 117 } 118 119 @GraphQLField 120 @GraphQLDescription("minimum unit price") 121 public UnitPriceObject getMinimumUnitPrice() { 122 var itemVariablePrice = getItemVariablePrice(); 123 124 return itemVariablePrice == null ? null : new UnitPriceObject(itemPrice.getCurrency(), itemVariablePrice.getMinimumUnitPrice()); 125 } 126 127 @GraphQLField 128 @GraphQLDescription("maximum unit price") 129 public UnitPriceObject getMaximumUnitPrice() { 130 var itemVariablePrice = getItemVariablePrice(); 131 132 return itemVariablePrice == null ? null : new UnitPriceObject(itemPrice.getCurrency(), itemVariablePrice.getMaximumUnitPrice()); 133 } 134 135 @GraphQLField 136 @GraphQLDescription("unit price increment") 137 public UnitPriceObject getUnitPriceIncrement() { 138 var itemVariablePrice = getItemVariablePrice(); 139 140 return itemVariablePrice == null ? null : new UnitPriceObject(itemPrice.getCurrency(), itemVariablePrice.getUnitPriceIncrement()); 141 } 142 143}