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.offer.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.offer.server.control.OfferItemControl; 027import com.echothree.model.control.uom.server.graphql.UnitOfMeasureTypeObject; 028import com.echothree.model.control.uom.server.graphql.UomSecurityUtils; 029import com.echothree.model.data.offer.server.entity.OfferItemFixedPrice; 030import com.echothree.model.data.offer.server.entity.OfferItemPrice; 031import com.echothree.model.data.offer.server.entity.OfferItemVariablePrice; 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("offer item price object") 039@GraphQLName("OfferItemPrice") 040public class OfferItemPriceObject 041 extends BaseObject { 042 043 private final OfferItemPrice offerItemPrice; // Always Present 044 045 public OfferItemPriceObject(OfferItemPrice offerItemPrice) { 046 this.offerItemPrice = offerItemPrice; 047 } 048 049 String offerItemPriceTypeName; 050 051 private String getOfferItemPriceTypeName() { 052 if(offerItemPriceTypeName == null) { 053 offerItemPriceTypeName = offerItemPrice.getOfferItem().getItem().getLastDetail().getItemPriceType().getItemPriceTypeName(); 054 } 055 056 return offerItemPriceTypeName; 057 } 058 059 private OfferItemFixedPrice offerItemFixedPrice; 060 061 private OfferItemFixedPrice getOfferItemFixedPrice() { 062 if(offerItemFixedPrice == null) { 063 if(getOfferItemPriceTypeName().equals(ItemPriceTypes.FIXED.name())) { 064 var offerItemControl = Session.getModelController(OfferItemControl.class); 065 066 offerItemFixedPrice = offerItemControl.getOfferItemFixedPrice(offerItemPrice); 067 } 068 } 069 070 return offerItemFixedPrice; 071 } 072 073 private OfferItemVariablePrice offerItemVariablePrice; 074 075 private OfferItemVariablePrice getOfferItemVariablePrice() { 076 if(offerItemVariablePrice == null) { 077 if(getOfferItemPriceTypeName().equals(ItemPriceTypes.VARIABLE.name())) { 078 var offerItemControl = Session.getModelController(OfferItemControl.class); 079 080 offerItemVariablePrice = offerItemControl.getOfferItemVariablePrice(offerItemPrice); 081 } 082 } 083 084 return offerItemVariablePrice; 085 } 086 087 @GraphQLField 088 @GraphQLDescription("offer item") 089 public OfferItemObject getOfferItem(final DataFetchingEnvironment env) { 090 return OfferSecurityUtils.getHasOfferItemAccess(env) ? new OfferItemObject(offerItemPrice.getOfferItem()) : null; 091 } 092 093 @GraphQLField 094 @GraphQLDescription("inventory condition") 095 public InventoryConditionObject getInventoryCondition(final DataFetchingEnvironment env) { 096 return InventorySecurityUtils.getHasInventoryConditionAccess(env) ? new InventoryConditionObject(offerItemPrice.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(offerItemPrice.getUnitOfMeasureType()) : null; 103 } 104 105 @GraphQLField 106 @GraphQLDescription("currency") 107 public CurrencyObject getCurrency(final DataFetchingEnvironment env) { 108 return AccountingSecurityUtils.getHasCurrencyAccess(env) ? new CurrencyObject(offerItemPrice.getCurrency()) : null; 109 } 110 111 @GraphQLField 112 @GraphQLDescription("unit price") 113 public UnitPriceObject getUnitPrice() { 114 var itemFixedPrice = getOfferItemFixedPrice(); 115 116 return itemFixedPrice == null ? null : new UnitPriceObject(offerItemPrice.getCurrency(), itemFixedPrice.getUnitPrice()); 117 } 118 119 @GraphQLField 120 @GraphQLDescription("minimum unit price") 121 public UnitPriceObject getMinimumUnitPrice() { 122 var itemVariablePrice = getOfferItemVariablePrice(); 123 124 return itemVariablePrice == null ? null : new UnitPriceObject(offerItemPrice.getCurrency(), itemVariablePrice.getMinimumUnitPrice()); 125 } 126 127 @GraphQLField 128 @GraphQLDescription("maximum unit price") 129 public UnitPriceObject getMaximumUnitPrice() { 130 var itemVariablePrice = getOfferItemVariablePrice(); 131 132 return itemVariablePrice == null ? null : new UnitPriceObject(offerItemPrice.getCurrency(), itemVariablePrice.getMaximumUnitPrice()); 133 } 134 135 @GraphQLField 136 @GraphQLDescription("unit price increment") 137 public UnitPriceObject getUnitPriceIncrement() { 138 var itemVariablePrice = getOfferItemVariablePrice(); 139 140 return itemVariablePrice == null ? null : new UnitPriceObject(offerItemPrice.getCurrency(), itemVariablePrice.getUnitPriceIncrement()); 141 } 142 143}