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