Ejemplo n.º 1
0
        public RemovePaymentProfileResult RemovePaymentProfile(RemovePaymentProfileParameter parameter)
        {
            UserProfileDto userProfileDto = SiteContext.Current.UserProfileDto;
            UserProfile    userProfile    = this.UnitOfWork.GetRepository <UserProfile>().Get(SiteContext.Current.UserProfileDto.Id);

            if (userProfile == null)
            {
                return(this.CreateErrorServiceResult <RemovePaymentProfileResult>(SubCode.Forbidden, MessageProvider.Current.Forbidden));
            }
            GetBillToResult billToResult = this.GetBillTo(parameter.BillToId);

            if (billToResult.ResultCode != ResultCode.Success)
            {
                return(this.CreateErrorServiceResult <RemovePaymentProfileResult>(billToResult.SubCode, billToResult.Message));
            }
            Customer billTo = billToResult.BillTo;
            RemoveStoredPaymentProfileResult removeStoredPaymentProfileResult = this.GetPaymentGateway().RemoveStoredPaymentProfile(new RemoveStoredPaymentProfileParameter()
            {
                CustomerProfileId = userProfile.GetProperty("StoredCustomerProfileId", string.Empty),
                PaymentProfileId  = parameter.PaymentProfileId,
                CustomerNumber    = billTo.CustomerNumber
            });

            if (!removeStoredPaymentProfileResult.Success)
            {
                return(this.CreateErrorServiceResult <RemovePaymentProfileResult>(SubCode.StorePaymentProfileFailed, string.Join(Environment.NewLine, removeStoredPaymentProfileResult.ResponseMessages)));
            }
            UserPaymentProfile userPaymentProfile = userProfile.UserPaymentProfiles.FirstOrDefault <UserPaymentProfile>((UserPaymentProfile u) => u.CardIdentifier.Equals(parameter.PaymentProfileId));

            if (userPaymentProfile != null)
            {
                this.RemoveUserPaymentProfile(userProfile, userPaymentProfile);
            }
            return(new RemovePaymentProfileResult());
        }
Ejemplo n.º 2
0
        public AddPaymentProfileResult AddPaymentProfile(AddPaymentProfileParameter parameter)
        {
            UserProfileDto userProfileDto = SiteContext.Current.UserProfileDto;

            if (userProfileDto == null)
            {
                return(this.CreateErrorServiceResult <AddPaymentProfileResult>(SubCode.Forbidden, MessageProvider.Current.Forbidden));
            }
            UserProfile     userProfile    = this.UnitOfWork.GetRepository <UserProfile>().Get(userProfileDto.Id);
            IPaymentGateway paymentGateway = this.GetPaymentGateway();

            if (!paymentGateway.SupportsStoredPaymentProfiles)
            {
                return(this.CreateErrorServiceResult <AddPaymentProfileResult>(SubCode.NotSupported, string.Format(MessageProvider.Current.Not_Supported, "Stored Payment Profiles")));
            }
            GetBillToResult billToResult = this.GetBillTo(parameter.BillToId);

            if (billToResult.ResultCode != ResultCode.Success)
            {
                return(this.CreateErrorServiceResult <AddPaymentProfileResult>(billToResult.SubCode, billToResult.Message));
            }
            Customer billTo = billToResult.BillTo;

            StorePaymentProfileResult storePaymentProfileResult = paymentGateway.StorePaymentProfile(new StorePaymentProfileParameter()
            {
                CustomerProfileId = userProfile.GetProperty("StoredCustomerProfileId", string.Empty),
                CustomerNumber    = billTo.CustomerNumber,
                CurrencyCode      = parameter.CurrencyCode,
                BillToAddress     = CreateCreditCardAddress(billTo),
                CreditCard        = parameter.CreditCard
            });

            if (!storePaymentProfileResult.Success)
            {
                return(this.CreateErrorServiceResult <AddPaymentProfileResult>(SubCode.StorePaymentProfileFailed, string.Join(Environment.NewLine, storePaymentProfileResult.ResponseMessages)));
            }
            userProfile.SetProperty("StoredCustomerProfileId", storePaymentProfileResult.CustomerProfileId);
            GetStoredPaymentProfileResult getStoredPaymentProfileResult = paymentGateway.GetStoredPaymentProfile(new GetStoredPaymentProfileParameter()
            {
                CustomerNumber    = billTo.CustomerNumber,
                CustomerProfileId = storePaymentProfileResult.CustomerProfileId,
                PaymentProfileId  = storePaymentProfileResult.PaymentProfileId
            });

            if (getStoredPaymentProfileResult.Success)
            {
                this.AddUserPaymentProfile(userProfile, new UserPaymentProfile()
                {
                    CardIdentifier   = getStoredPaymentProfileResult.PaymentProfile.PaymentProfileId,
                    Description      = parameter.CreditCard.CardHolderName,//BUSA-462 : Ability to save Credit Cards (in CenPos) and offer it to users.
                    CardType         = parameter.CreditCard.CardType,
                    MaskedCardNumber = getStoredPaymentProfileResult.PaymentProfile.MaskedCardNumber,
                    ExpirationDate   = getStoredPaymentProfileResult.PaymentProfile.Expiration
                });
            }
            return(new AddPaymentProfileResult());
        }
Ejemplo n.º 3
0
 public override GetCartCollectionResult Execute(IUnitOfWork unitOfWork, GetCartCollectionParameter parameter, GetCartCollectionResult result)
 {
     //BUSA-730: For BillTo having multiple Ship to show all orders waiting for approval
     if (parameter.Status.EqualsIgnoreCase("AwaitingApproval"))
     {
         result.CartsQuery = unitOfWork.GetRepository <CustomerOrder>().GetTable().Where(o => o.ApproverUserProfileId == SiteContext.Current.UserProfileDto.Id);
         return(NextHandler.Execute(unitOfWork, parameter, result));
     }
     else
     {
         GetBillToResult getBillToResult = customerService.GetBillTo(new GetBillToParameter()
         {
             BillToId = parameter.BillToId
         });
         if (getBillToResult.ResultCode != ResultCode.Success)
         {
             return(CreateErrorServiceResult(result, getBillToResult.SubCode, getBillToResult.Message));
         }
         result.CartsQuery = unitOfWork.GetRepository <CustomerOrder>().GetTable().Where(o => o.CustomerId == getBillToResult.BillTo.Id);
         return(NextHandler.Execute(unitOfWork, parameter, result));
     }
 }
Ejemplo n.º 4
0
        private AddPaymentTransactionResult SubmitNewTransaction(AddPaymentTransactionParameter parameter)
        {
            Customer billTo1;
            Customer shipTo1;

            if (parameter.IsAdmin)
            {
                ICustomerRepository typedRepository = this.UnitOfWork.GetTypedRepository <ICustomerRepository>();
                if (!parameter.BillToId.HasValue)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.NotFound, "BillToId is empty"));
                }
                Guid?nullable = parameter.ShipToId;
                if (!nullable.HasValue)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.NotFound, "ShipToId is empty"));
                }
                ICustomerRepository customerRepository1 = typedRepository;
                nullable = parameter.BillToId;
                Guid id1 = nullable.Value;
                billTo1 = customerRepository1.Get(id1);
                ICustomerRepository customerRepository2 = typedRepository;
                nullable = parameter.ShipToId;
                Guid id2 = nullable.Value;
                shipTo1 = customerRepository2.Get(id2);
            }
            else
            {
                GetBillToResult billTo2 = this.GetBillTo(parameter.BillToId);
                if (billTo2.ResultCode != ResultCode.Success)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(billTo2.SubCode, billTo2.Message));
                }
                billTo1 = billTo2.BillTo;
                GetShipToResult shipTo2 = this.GetShipTo(parameter.BillToId, parameter.ShipToId);
                if (shipTo2.ResultCode != ResultCode.Success)
                {
                    return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(shipTo2.SubCode, shipTo2.Message));
                }
                shipTo1 = shipTo2.ShipTo;
            }
            SubmitTransactionParameter transactionParameter = new SubmitTransactionParameter()
            {
                TransactionType  = parameter.TransactionType,
                CustomerNumber   = billTo1.CustomerNumber,
                ReferenceNumber  = parameter.ReferenceNumber,
                CurrencyCode     = parameter.CurrencyCode,
                BillToAddress    = CreateCreditCardAddress(billTo1, parameter.CreditCard),
                ShipToAddress    = CreateCreditCardAddress(shipTo1, (CreditCardDto)null),
                PaymentProfileId = parameter.PaymentProfileId,
                CreditCard       = parameter.CreditCard,
                Amount           = parameter.Amount,
                WebsiteId        = parameter.WebsiteId
            };

            if (!parameter.PaymentProfileId.IsBlank())
            {
                UserProfile userProfile = this.UnitOfWork.GetRepository <UserProfile>().Get(SiteContext.Current.UserProfileDto.Id);
                transactionParameter.CustomerProfileId = userProfile.GetProperty("StoredCustomerProfileId", string.Empty);
            }
            CreditCardTransaction creditCardTransaction = this.CreateCreditCardTransaction(transactionParameter);

            transactionParameter.CreditCardTransactionId = new Guid?(creditCardTransaction.Id);
            SubmitTransactionResult submitTransactionResult = (parameter.CreditCard.CardType == "PayPal" ? this.paymentGatewayFactory.GetPaymentGateway("PaypalExpress") : this.GetPaymentGateway()).SubmitTransaction(transactionParameter);

            if (submitTransactionResult.ResponseMessages.Count > 0)
            {
                LogHelper.For(this).Error(transactionParameter.CustomerNumber + submitTransactionResult.ResponseMessages.FirstOrDefault() + submitTransactionResult.Success, "CenposResponse");
            }
            if (!submitTransactionResult.Success)
            {
                this.UnitOfWork.RollbackTransaction();
                this.UnitOfWork.Clear(true);
                this.UnitOfWork.BeginTransaction();
                this.ResetContext();
                this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult);
                if (submitTransactionResult.IsConnectionError)
                {
                    this.SubmitReversalTransaction(transactionParameter, submitTransactionResult);
                }
                return(this.CreateErrorServiceResult <AddPaymentTransactionResult>(SubCode.CreditCardFailed, string.Join(Environment.NewLine, (IEnumerable <string>)submitTransactionResult.ResponseMessages)));
            }
            return(new AddPaymentTransactionResult()
            {
                CreditCardTransaction = this.UpdateCreditCardTransaction(creditCardTransaction, transactionParameter, submitTransactionResult)
            });
        }