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); }
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); }
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)); } }