001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 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.payment.server.transfer; 018 019import com.echothree.model.control.comment.common.CommentConstants; 020import com.echothree.model.control.payment.common.PaymentMethodTypes; 021import com.echothree.model.control.payment.common.PaymentOptions; 022import com.echothree.model.control.payment.common.transfer.PaymentMethodTransfer; 023import com.echothree.model.control.payment.server.control.PaymentMethodControl; 024import com.echothree.model.control.payment.server.control.PaymentMethodTypeControl; 025import com.echothree.model.control.payment.server.control.PaymentProcessorControl; 026import com.echothree.model.data.payment.server.entity.PaymentMethod; 027import com.echothree.model.data.user.server.entity.UserVisit; 028import com.echothree.util.server.persistence.Session; 029import javax.enterprise.context.RequestScoped; 030 031@RequestScoped 032public class PaymentMethodTransferCache 033 extends BasePaymentTransferCache<PaymentMethod, PaymentMethodTransfer> { 034 035 PaymentMethodControl paymentMethodControl = Session.getModelController(PaymentMethodControl.class); 036 PaymentMethodTypeControl paymentMethodTypeControl = Session.getModelController(PaymentMethodTypeControl.class); 037 PaymentProcessorControl paymentProcessorControl = Session.getModelController(PaymentProcessorControl.class); 038 039 boolean includeComments; 040 041 /** Creates a new instance of PaymentMethodTransferCache */ 042 protected PaymentMethodTransferCache() { 043 super(); 044 045 var options = session.getOptions(); 046 if(options != null) { 047 setIncludeUuid(options.contains(PaymentOptions.PaymentMethodIncludeUuid)); 048 includeComments = options.contains(PaymentOptions.PaymentMethodIncludeComments); 049 setIncludeEntityAttributeGroups(options.contains(PaymentOptions.PaymentMethodIncludeEntityAttributeGroups)); 050 } 051 052 setIncludeEntityInstance(true); 053 } 054 055 @Override 056 public PaymentMethodTransfer getTransfer(UserVisit userVisit, PaymentMethod paymentMethod) { 057 var paymentMethodTransfer = get(paymentMethod); 058 059 if(paymentMethodTransfer == null) { 060 var paymentMethodDetail = paymentMethod.getLastDetail(); 061 var paymentMethodName = paymentMethodDetail.getPaymentMethodName(); 062 var paymentMethodTypeTransfer = paymentMethodTypeControl.getPaymentMethodTypeTransfer(userVisit, paymentMethodDetail.getPaymentMethodType()); 063 var paymentMethodTypeName = paymentMethodTypeTransfer.getPaymentMethodTypeName(); 064 var paymentProcessor = paymentMethodDetail.getPaymentProcessor(); 065 var paymentProcessorTransfer = paymentProcessor == null ? null : paymentProcessorControl.getPaymentProcessorTransfer(userVisit, paymentProcessor); 066 var isDefault = paymentMethodDetail.getIsDefault(); 067 var sortOrder = paymentMethodDetail.getSortOrder(); 068 var description = paymentMethodControl.getBestPaymentMethodDescription(paymentMethod, getLanguage(userVisit)); 069 Boolean requestNameOnCard = null; 070 Boolean requireNameOnCard = null; 071 Boolean checkCardNumber = null; 072 Boolean requestExpirationDate = null; 073 Boolean requireExpirationDate = null; 074 Boolean checkExpirationDate = null; 075 Boolean requestSecurityCode = null; 076 Boolean requireSecurityCode = null; 077 String cardNumberValidationPattern = null; 078 String securityCodeValidationPattern = null; 079 Boolean retainCreditCard = null; 080 Boolean retainSecurityCode = null; 081 Boolean requestBilling = null; 082 Boolean requireBilling = null; 083 Boolean requestIssuer = null; 084 Boolean requireIssuer = null; 085 Integer holdDays = null; 086 087 if(paymentMethodTypeName.equals(PaymentMethodTypes.CHECK.name())) { 088 var paymentMethodCheck = paymentMethodControl.getPaymentMethodCheck(paymentMethod); 089 090 holdDays = paymentMethodCheck.getHoldDays(); 091 } else if(paymentMethodTypeName.equals(PaymentMethodTypes.CREDIT_CARD.name())) { 092 var paymentMethodCreditCard = paymentMethodControl.getPaymentMethodCreditCard(paymentMethod); 093 094 requestNameOnCard = paymentMethodCreditCard.getRequestNameOnCard(); 095 requireNameOnCard = paymentMethodCreditCard.getRequireNameOnCard(); 096 checkCardNumber = paymentMethodCreditCard.getCheckCardNumber(); 097 requestExpirationDate = paymentMethodCreditCard.getRequestExpirationDate(); 098 requireExpirationDate = paymentMethodCreditCard.getRequireExpirationDate(); 099 checkExpirationDate = paymentMethodCreditCard.getCheckExpirationDate(); 100 requestSecurityCode = paymentMethodCreditCard.getRequestSecurityCode(); 101 requireSecurityCode = paymentMethodCreditCard.getRequireSecurityCode(); 102 cardNumberValidationPattern = paymentMethodCreditCard.getCardNumberValidationPattern(); 103 securityCodeValidationPattern = paymentMethodCreditCard.getSecurityCodeValidationPattern(); 104 retainCreditCard = paymentMethodCreditCard.getRetainCreditCard(); 105 retainSecurityCode = paymentMethodCreditCard.getRetainSecurityCode(); 106 requestBilling = paymentMethodCreditCard.getRequestBilling(); 107 requireBilling = paymentMethodCreditCard.getRequireBilling(); 108 requestIssuer = paymentMethodCreditCard.getRequestIssuer(); 109 requireIssuer = paymentMethodCreditCard.getRequireIssuer(); 110 } 111 112 paymentMethodTransfer = new PaymentMethodTransfer(paymentMethodName, paymentMethodTypeTransfer, paymentProcessorTransfer, 113 isDefault, sortOrder, description, requestNameOnCard, requireNameOnCard, checkCardNumber, 114 requestExpirationDate, requireExpirationDate, checkExpirationDate, requestSecurityCode, requireSecurityCode, cardNumberValidationPattern, 115 securityCodeValidationPattern, retainCreditCard, retainSecurityCode, requestBilling, requireBilling, requestIssuer, requireIssuer, holdDays); 116 put(userVisit, paymentMethod, paymentMethodTransfer); 117 118 if(includeComments) { 119 setupComments(userVisit, paymentMethod, null, paymentMethodTransfer, CommentConstants.CommentType_PAYMENT_METHOD); 120 } 121 } 122 123 return paymentMethodTransfer; 124 } 125 126}