예제 #1
0
        public long Redemption(PagSeguro.Model.Billet billet, Model.Transaction transaction, Order order, List <Configuration> settings)
        {
            var pagSeguroSettings = settings.Where(s => s.Key.Contains("pagSeguro")).ToList();

            Dictionary <string, string> dictionary = new Dictionary <string, string>();

            pagSeguroSettings.ForEach(s => dictionary.Add(s.Key, s.Value));

            PagSeguro.Transaction trans = new PagSeguro.Transaction(dictionary);
            var resultTransaction       = new Domain.Model.Transaction();

            var orderCreate = this._orderRepository.Create(order);

            if (orderCreate.Id > 0)
            {
                billet.OrderId = orderCreate.Id;

                if (transaction.Value > 0)
                {
                    transaction.OrderId = orderCreate.Id;

                    transaction.Description = string.Format(transaction.Description, orderCreate.Id);

                    resultTransaction = this._transactionRepository.CreateTransaction(transaction);
                    //Order Debited
                    this._orderRepository.CreateOrderHistory(new OrderHistory()
                    {
                        OrderId = orderCreate.Id, OrderStatusId = 9
                    });
                }

                var pagSeguro = trans.BilletCheckout(billet);

                if (pagSeguro.Success)
                {
                    Domain.Model.Billet billetCreate = new Model.Billet();

                    billetCreate.OrderId    = orderCreate.Id;
                    billetCreate.SenderHash = billet.SenderHash;

                    billetCreate.Session = billet.Session;

                    billetCreate.Value = order.Money;
                    billetCreate.Name  = billet.Buyer.Name;
                    billetCreate.CPF   = billet.Buyer.CPF;
                    billetCreate.Email = billet.Buyer.Mail;


                    billetCreate.Street     = billet.ShippingAddress.Street;
                    billetCreate.Number     = billet.ShippingAddress.Number;
                    billetCreate.Complement = billet.ShippingAddress.Complement;
                    billetCreate.ZipCode    = billet.ShippingAddress.ZipCode;
                    billetCreate.District   = billet.ShippingAddress.District;
                    billetCreate.City       = billet.ShippingAddress.City;
                    billetCreate.State      = billet.ShippingAddress.State;

                    billetCreate.FeeAmount   = Convert.ToSingle(pagSeguro.FeeAmount);
                    billetCreate.NetAmount   = Convert.ToSingle(pagSeguro.NetAmount);
                    billetCreate.Code        = pagSeguro.Code;
                    billetCreate.PaymentLink = pagSeguro.PaymentLink;

                    this._orderRepository.CreateBilletByOrderId(billetCreate);

                    int type = Enum.Parse(typeof(Domain.Model.Enum.OrderStatus), pagSeguro.TransactionStatus).GetHashCode();

                    //Order Debited
                    this._orderRepository.CreateOrderHistory(new OrderHistory()
                    {
                        OrderId = orderCreate.Id, OrderStatusId = type
                    });

                    this._orderRepository.UpdateOrderDeliveryAddressByCartId(order.CartId, orderCreate.Id);

                    this._cartRepository.UpdateStatusByCartId(order.CartId, 1);
                }

                return(orderCreate.Id);
            }

            return(0);
        }
예제 #2
0
        public long Redemption(PagSeguro.Model.Credit credit, Domain.Model.Transaction transaction, Domain.Model.Order order)
        {
            PagSeguro.Transaction trans = new PagSeguro.Transaction();
            var resultTransaction       = new Domain.Model.Transaction();

            var orderCreate = this._orderRepository.Create(order);

            if (orderCreate.Id > 0)
            {
                credit.OrderId = orderCreate.Id;

                if (transaction.Value > 0)
                {
                    transaction.OrderId = orderCreate.Id;

                    transaction.Description = string.Format(transaction.Description, orderCreate.Id);

                    resultTransaction = this._transactionRepository.CreateTransaction(transaction);
                    //Order Debited
                    this._orderRepository.CreateOrderHistory(new OrderHistory()
                    {
                        OrderId = orderCreate.Id, OrderStatusId = 9
                    });
                }

                var pagSeguro = trans.CreditCheckout(credit);

                if (pagSeguro.Success)
                {
                    Domain.Model.Credit creditCreate = new Model.Credit();

                    creditCreate.OrderId         = orderCreate.Id;
                    creditCreate.Owner           = credit.Owner;
                    creditCreate.Brand           = credit.Brand;
                    creditCreate.SenderHash      = credit.SenderHash;
                    creditCreate.CreditCardToken = credit.CreditCardToken;
                    creditCreate.Session         = credit.Session;
                    creditCreate.Parcel          = credit.Parcel.Quantity;
                    creditCreate.Value           = credit.Parcel.Value;
                    creditCreate.SubTotal        = order.Money;
                    creditCreate.Holder          = credit.CreditCardHolder.Name;
                    creditCreate.CPF             = credit.CreditCardHolder.CPF;
                    creditCreate.DateNasc        = credit.CreditCardHolder.BirthDate;
                    creditCreate.Contact         = credit.CreditCardHolder.DDD + credit.CreditCardHolder.Phone;

                    creditCreate.Street     = credit.BillingAddress.Street;
                    creditCreate.Number     = credit.BillingAddress.Number;
                    creditCreate.Complement = credit.BillingAddress.Complement;
                    creditCreate.ZipCode    = credit.BillingAddress.ZipCode;
                    creditCreate.District   = credit.BillingAddress.District;
                    creditCreate.City       = credit.BillingAddress.City;
                    creditCreate.State      = credit.BillingAddress.State;

                    creditCreate.FeeAmount = Convert.ToSingle(pagSeguro.FeeAmount);
                    creditCreate.NetAmount = Convert.ToSingle(pagSeguro.NetAmount);
                    creditCreate.Code      = pagSeguro.Code;

                    this._orderRepository.CreateCreditByOrderId(creditCreate);


                    int type = Enum.Parse(typeof(Domain.Model.Enum.OrderStatus), pagSeguro.TransactionStatus).GetHashCode();

                    //Order Debited
                    this._orderRepository.CreateOrderHistory(new OrderHistory()
                    {
                        OrderId = orderCreate.Id, OrderStatusId = type
                    });

                    this._orderRepository.UpdateOrderDeliveryAddressByCartId(order.CartId, orderCreate.Id);

                    this._cartRepository.UpdateStatusByCartId(order.CartId, 1);
                }

                return(orderCreate.Id);
            }

            return(0);
        }
예제 #3
0
        public IHttpActionResult Redemption(Order order)
        {
            try
            {
                #region Declarations of variables and objects

                long              orderId     = 0;
                string            session     = null;
                float             total       = 0;
                ClaimsPrincipal   principal   = Request.GetRequestContext().Principal as ClaimsPrincipal;
                Participant       participant = null;
                Domain.Model.Cart domainCart  = null;
                var     carts       = new List <TicketGames.API.Models.Order.Cart>();
                Account account     = new Account();
                var     transaction = new Domain.Model.Transaction();
                var     orderDomain = new Domain.Model.Order();


                #endregion

                long.TryParse(principal.Claims.Where(c => c.Type == "participant_Id").Single().Value, out participantId);

                if (this.participantId > 0)
                {
                    #region Get Participant

                    var participantKey = string.Concat("Participant:Id:", this.participantId.ToString(), ":Register");

                    participant = CacheManager.GetObject <Participant>(participantKey);

                    if (participant == null)
                    {
                        var result = this._participantService.GetParticipant(this.participantId);

                        participant = new Participant(result);
                    }


                    var domainParticipant = participant.MappingDomain();


                    #endregion

                    #region Get Cart

                    var cartKey = string.Concat("Participant:Id:", this.participantId.ToString(), ":Cart");

                    domainCart = CacheManager.GetObject <Domain.Model.Cart>(cartKey);

                    if (domainCart == null)
                    {
                        domainCart = this._cartService.Get(this.participantId);
                    }

                    var deliveryAddressResult = this._cartService.Get(this.participantId, domainCart.Id);

                    carts = new TicketGames.API.Models.Order.Cart().CreateCart(domainCart);

                    #endregion

                    #region Get Balance

                    var transactions = this._transactionService.GetTransactions(participantId);

                    if (transactions.Count > 0)
                    {
                        account = new Account().Balances(transactions);
                    }

                    #endregion

                    #region Get Session

                    var key = string.Concat("Participant:Id:", participantId.ToString(), ":Session");

                    session = CacheManager.GetObject <string>(key);

                    #endregion


                    #region Get Settings

                    var settingsKey = "Settings:Configuration";
                    List <Domain.Model.Configuration> settings = null;
                    settings = CacheManager.GetObject <List <Domain.Model.Configuration> >(settingsKey);

                    if (settings == null)
                    {
                        settings = this._configurationService.GetSettings();

                        if (settings != null && settings.Count > 0)
                        {
                            CacheManager.StoreObject(settingsKey, settings, LifetimeProfile.Longest);
                        }
                    }

                    #endregion

                    carts.ForEach(c =>
                                  total += c.Price * c.Quantity
                                  );

                    orderDomain.ParticipantId = this.participantId;

                    //Status de pedido criado
                    orderDomain.OrderStatusId = 4;

                    orderDomain.OrderHistory.Add(new Domain.Model.OrderHistory()
                    {
                        OrderStatusId = 4
                    });

                    orderDomain.Value = total;

                    orderDomain.Money = Convert.ToSingle(total - account.Balance);

                    foreach (var cart in carts)
                    {
                        orderDomain.OrderItems.Add(new Domain.Model.OrderItem()
                        {
                            ProductId = cart.ProductId,
                            RaffleId  = cart.RaffleId,
                            Value     = cart.Price,
                            Quantity  = cart.Quantity
                        });

                        orderDomain.CartId = cart.CartId;
                    }

                    switch (order.PaymentType)
                    {
                    case PaymentType.Point:
                    {
                        break;
                    }

                    case PaymentType.Billet:
                    {
                        orderDomain.PaymentType = "Billet";

                        if (account.Balance > 0)
                        {
                            transaction.ParticipantId     = this.participantId;
                            transaction.TransactionTypeId = 2;
                            transaction.Description       = "Fechamento do pedido {0}";
                            transaction.Value             = account.Balance;

                            orderDomain.Point       = account.Balance;
                            orderDomain.PaymentType = "Point + Billet";
                        }

                        var billet = new Domain.Model.Billet();

                        billet.Name       = participant.Name;
                        billet.CPF        = participant.CPF;
                        billet.SenderHash = order.SenderHash;
                        billet.Session    = session;

                        billet.Value = orderDomain.Money;

                        var paymentBillet = order.MappingBillet(domainParticipant, deliveryAddressResult, billet);

                        orderId = this._orderService.Redemption(paymentBillet, transaction, orderDomain, settings);

                        break;
                    }

                    case PaymentType.Credit:
                    {
                        orderDomain.PaymentType = "Credit";

                        if (account.Balance > 0)
                        {
                            transaction.ParticipantId     = this.participantId;
                            transaction.TransactionTypeId = 2;
                            transaction.Description       = "Fechamento do pedido {0}";
                            transaction.Value             = account.Balance;

                            orderDomain.Point       = account.Balance;
                            orderDomain.PaymentType = "Point + Credit";
                        }

                        var credit = new Domain.Model.Credit();

                        credit.Owner           = order.Card.Owner;
                        credit.SenderHash      = order.SenderHash;
                        credit.Brand           = order.Card.Brand;
                        credit.CreditCardToken = order.Card.CreditCardToken;
                        credit.Session         = session;

                        credit.Parcel = order.Card.Parcel.Quantity;
                        credit.Value  = order.Card.Parcel.Value;

                        var paymentCredit = order.MappingCredit(domainParticipant, domainCart, deliveryAddressResult, credit);

                        orderId = this._orderService.Redemption(paymentCredit, transaction, orderDomain);

                        break;
                    }

                    default: break;
                    }

                    if (orderId > 0)
                    {
                        CacheManager.KeyDelete(cartKey);
                    }


                    var pedido = order;
                }

                return(Ok(orderId));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }