Example #1
0
        public async Task <IActionResult> Add([FromBody] Order order)
        {
            await _orderService.Add(order);

            return(Ok(order.OrderMapping()));
        }
Example #2
0
        public async Task <IActionResult> Add([FromBody] OrderDTO order)
        {
            var findUser = await _userService.FindAsync(order.UserToken);

            if (!findUser.IsSuccessful)
            {
                return(Json(new Response <string> {
                    Message = Strings.InvalidToken
                }));
            }
            var addOrder = await _orderService.Add(order);

            if (!addOrder.IsSuccessful)
            {
                return(Json(new Response <AddOrderReponse> {
                    Message = addOrder.Message
                }));
            }
            var fatcory = await _gatewayFectory.GetInsance(int.Parse(_configuration["DefaultGatewayId"]));

            var transModel = new CreateTransactionRequest
            {
                OrderId      = addOrder.Result.Order.OrderId,
                Amount       = addOrder.Result.Order.TotalPriceAfterDiscount,
                MobileNumber = findUser.Result.MobileNumber.ToString(),
                ApiKey       = fatcory.Result.Gateway.MerchantId,
                CallbackUrl  = fatcory.Result.Gateway.PostBackUrl,
                Url          = fatcory.Result.Gateway.Url
            };
            var createTrans = await fatcory.Result.Service.CreateTrasaction(transModel, null);

            if (!createTrans.IsSuccessful)
            {
                return(Json(new Response <AddOrderReponse> {
                    Message = createTrans.Message, Result = new AddOrderReponse {
                        OrderId = addOrder.Result.Order.OrderId
                    }
                }));
            }
            var addPayment = await _paymentService.Add(transModel, createTrans.Result.TransactionId, fatcory.Result.Gateway.PaymentGatewayId);

            if (!addPayment.IsSuccessful)
            {
                return(Json(new Response <AddOrderReponse> {
                    Message = addPayment.Message, Result = new AddOrderReponse {
                        OrderId = addOrder.Result.Order.OrderId
                    }
                }));
            }
            return(Json(new Response <AddOrderReponse>
            {
                IsSuccessful = true,
                Result = new AddOrderReponse
                {
                    OrderId = addOrder.Result.Order.OrderId,
                    Url = createTrans.Result.GatewayUrl,
                    BasketChanged = addOrder.Result.IsChanged,
                    ChangedProducts = addOrder.Result.Order.OrderDetails.Select(x => new ProductDTO
                    {
                        Id = x.ProductId,
                        Discount = x.DiscountPercent ?? 0,
                        Price = x.Price,
                        Count = x.Count
                    })
                }
            }));
        }
        public IActionResult OrderDetails(BasketOrderModel basketOrderModel)
        {
            string tempId = HttpContext.Session.GetString("id");
            int    userId = int.Parse(tempId);

            var basketProducts = _basketService.Baskets(userId);
            List <BasketListele> basketListele = new List <BasketListele>();

            foreach (var item in basketProducts)
            {
                BasketListele basketList = new BasketListele();
                var           product    = _productService.GetById(item.ProductId);
                if (product == null)
                {
                    var basketToDeleted = _basketService.GetById(item.Id);
                    _basketService.Delete(basketToDeleted); // eğer kullanıcın sepetindeki bir ürün daha sonra alınırsa bu ürün kullanıcının sepetinden de otomatik
                                                            //silinmektedir.
                    continue;
                }
                int basketId = item.Id;
                basketList.Products = product;
                basketList.BasketId = basketId;
                basketListele.Add(basketList);
            }
            basketOrderModel.BasketLists         = basketListele; //silinebilir.
            basketOrderModel.OrderList.BasketIds = HttpContext.Session.GetString("BasketIds");
            basketOrderModel.OrderList.OrderTime = DateTime.Now;
            basketOrderModel.OrderList.UserId    = userId;
            basketOrderModel.CardDetails.UserId  = userId;

            Order order = new Order() //aynı kullanıcıya ait birden fazla kayıt veritabanında tutulur . Bu daha sonra düzenlenebilir.
            {
                Address   = basketOrderModel.OrderList.Address,
                BasketIds = basketOrderModel.OrderList.BasketIds,
                EMail     = basketOrderModel.OrderList.EMail,
                OrderTime = basketOrderModel.OrderList.OrderTime,
                UserId    = basketOrderModel.OrderList.UserId
            };

            _orderService.Add(order);
            int    orderId    = order.Id; // o anki order ıd alınır . sipariş faturasına eklenmesi için
            string orderIdNow = orderId.ToString();

            HttpContext.Session.SetString("getByOrderId", orderIdNow);


            Card card = new Card()
            {
                CardName        = basketOrderModel.CardDetails.CardName,
                CardNumber      = basketOrderModel.CardDetails.CardNumber,
                Cvv             = basketOrderModel.CardDetails.Cvv,
                ExpirationMonth = basketOrderModel.CardDetails.ExpirationMonth,
                ExpirationYear  = basketOrderModel.CardDetails.ExpirationYear,
                UserId          = userId
            };
            Card userCard = _cardService.GetByUserId(userId);

            if (userCard == null) // ilk kez kayıt yapan kullanıcı veritabanına eklenir. Çünkü 1 kullanıcının sistemde sadece 1 kayıtı olacaktır.
            {
                _cardService.Add(card);
            }
            // eğer kullanıcı kendi kartı dışında bir kart kullanır ise bu kart sisteme eklenmez. Daha sonra yapılacak olan
            //tüm alışverişlerde sistemde ilk kayıt yapılmış olan kart kullanıcıya gösterilecektir.
            // Daha sonra istenirse kaydedilmiş olan kartı güncelleyebilir veya silebilir.



            //BasketOrderModel basketOrderModelDeneme = new BasketOrderModel() //silinebilir. Veritabanınadan order bilgileri çekilebilir.
            //{
            //    CardDetails = card,
            //    City = basketOrderModel.City,
            //    FirstName = basketOrderModel.FirstName,
            //    LastName = basketOrderModel.LastName,
            //    Phone = basketOrderModel.Phone,
            //    OrderList = order,
            //    BasketLists = basketOrderModel.BasketLists
            //};
            #region Mail Yollama
            SmtpClient  client = new SmtpClient();
            MailAddress from   = new MailAddress("mail adresiniz", "ShoopingApp");
            string      eMail  = basketOrderModel.OrderList.EMail;
            MailAddress to     = new MailAddress(eMail);//bizim mail adresi
            MailMessage msg    = new MailMessage(from, to);
            msg.IsBodyHtml = true;
            msg.Subject    = "Alışveriş Faturası";

            #region StringBuilder ile Mail düzenleme


            StringBuilder builder = new StringBuilder();
            builder.Append("<head>");
            builder.Append(" <link rel=\"stylesheet\"  href=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css \" " + " " + "integrity=\"sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l\" " + " " + "crossorigin=\"anonymous\" />");
            builder.Append("</head>");
            builder.Append("<body>");

            builder.Append("<h4 style=\"text-align:center;color:red;\">Sayin " + basketOrderModel.FirstName + " " + basketOrderModel.LastName + " Siparis Faturaniz</h4><br><br>");
            builder.Append("<table class=\"table table-striped\">");
            builder.Append("  <tr>");
            builder.Append("<th>Ürün resmi </th><th>Ürün ismi </th><th>Ürün fiyatı</th><th>Açiklama </th> ");
            builder.Append("</tr>");
            foreach (var item in basketListele)
            {
                builder.Append("  <tr>");
                string imagePath = "wwwroot\\" + "img\\" + item.Products.ImageUrl;

                //var imageFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, imagePath);
                builder.Append("<td>  <img src=" + "\"" + imagePath + "\"" + " " + "width=\"100\" height=\"100\" /> </td><td>" + item.Products.ProductName + "</td><td>" + item.Products.ProductPrice + "</td><td>" + item.Products.Description + " </td> ");

                builder.Append("</tr>");
            }



            builder.Append("</table>");
            builder.Append("<div style=\" text-align:center;margin-top:40px; font-family: Arial, Helvetica, sans - serif; \">");



            builder.Append("<pre>");
            builder.Append("<br><br><h4 style=\"color:red;\">-- Kart Bilgileriniz --</h4>" + "<br>");
            builder.Append(" Kart İsminiz : " + basketOrderModel.CardDetails.CardName + "<br>");
            builder.Append(" Kart Numaraniz : " + basketOrderModel.CardDetails.CardNumber + "<br>");
            builder.Append(" Son kullanma tarihi : " + basketOrderModel.CardDetails.ExpirationMonth + "\\" + basketOrderModel.CardDetails.ExpirationYear + "<br>");
            int toplam = 0;
            foreach (var item in basketListele)
            {
                toplam += item.Products.ProductPrice;
            }
            builder.Append("<br><br><h4 style=\"color:red;\">-- Sipariş Bilgileriniz --</h4>" + "<br>");
            builder.Append(" Siparis Tutari : " + toplam + " TL" + "<br>");
            builder.Append(" Siparis Adresiniz : " + basketOrderModel.OrderList.Address + "<br>");
            builder.Append(" E-Mail Adresiniz : " + basketOrderModel.OrderList.EMail + "<br>");
            builder.Append(" Siparis Tarihi  : " + basketOrderModel.OrderList.OrderTime + "<br>");
            builder.Append(" Telefon Numaraniz :  " + basketOrderModel.Phone + "<br>");
            builder.Append(" Sehriniz :  " + basketOrderModel.City + "<br>");
            builder.Append("</pre>");

            builder.Append("</div>");
            builder.Append("</body>");

            #region Pdf
            StringReader sr = new StringReader(builder.ToString());

            Document   pdfDoc     = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);

            #region Türkçe karakter sorunu için yazılması gereken kod bloğu.
            // FontFactory.Register(Path.Combine("C:\\Windows\\Fonts\\Arial.ttf"), "Garamond"); /// kendi türkçe karakter desteği olan fontunuzu da girebilirsiniz.
            StyleSheet css = new StyleSheet();
            css.LoadTagStyle("body", "face", "Garamond");
            css.LoadTagStyle("body", "encoding", "Identity-H");
            css.LoadTagStyle("body", "size", "12pt");
            htmlparser.SetStyleSheet(css);
            #endregion

            using (MemoryStream memoryStream = new MemoryStream())
            {
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);

                pdfDoc.Open();
                htmlparser.Parse(sr);
                pdfDoc.Close();
                byte[] bytes = memoryStream.ToArray();
                memoryStream.Close();



                // normal text halinde yollar ama biz pdf yolluyoruz ve buna gerek kalmaz.
                // msg.Body += "Bizleri tercih ettiğiniz için teşekkür ederiz" + builder; //burada başında gönderen kişinin mail adresi geliyor
                //msg.CC.Add(from);//herkes görür
                msg.Attachments.Add(new Attachment(new MemoryStream(bytes), "SiparisFaturasi.pdf"));
                //   msg.Attachments.Add(new Attachment("images/hp.jpg"));

                NetworkCredential info = new NetworkCredential("mail adresiniz", "sifreniz");
                client.Port        = 587;
                client.Host        = "smtp.gmail.com";
                client.EnableSsl   = true;
                client.Credentials = info;
                client.Send(msg);
            }

            #endregion

            #endregion
            #endregion



            #region Odeme

            //Odeme actiondan buraya taşınmıştır. Çünkü Post methotda olması daha uygun olacaktır.

            foreach (var item in basketProducts)
            {
                var productToDeleted = _productService.GetById(item.ProductId); // tam sepette ödeme ye tıklarken ürün satılmışsa buradaki product
                // null olabilir bu durumu sonra kontrol etmelisin.
                var product = _productService.GetById(item.ProductId);          // ilgili ürün bulunur.

                int  productPrice = product.ProductPrice;                       // ürünün fiyatı bulunur.
                int  saticiId     = product.UserId;
                User satici       = _userService.GetById(saticiId);
                satici.Balance += productPrice;
                _userService.Update(satici); // saticinin bakiyesi güncellenir.


                if (productToDeleted.UnitsInStock == 1)
                {
                    _productService.Delete(productToDeleted); // Stokta 1 tane varsa ilgili ürün silinir.
                    _favorilerService.Delete(item.ProductId); // favorilerden de silinir.
                }
                if (productToDeleted.UnitsInStock > 1)
                {
                    productToDeleted.UnitsInStock -= 1;
                    _productService.Update(productToDeleted);
                }

                _basketService.Delete(item); // ilgili sipariş silinir.
            }
            #endregion


            // return View(basketOrderModelDeneme); //sipariş faturası // ödeme kısmında productlar veritabanından silinir.
            // ama kullanıcı siparişten vazgeçebilir. fake den silinse daha güzel olur . Araştır bunu
            //kullanıcı sipariş verdikten sonra iptal edemez bu yüzden fake e ihtiyeç yoktur. Bu durum Daha sonra düzenlenebilir.
            return(RedirectToAction("Odeme", "Basket", new
            {
                city = basketOrderModel.City,
                firstName = basketOrderModel.FirstName,
                lastName = basketOrderModel.LastName,
                phone = basketOrderModel.Phone,
                cardName = basketOrderModel.CardDetails.CardName,
                cardNumber = basketOrderModel.CardDetails.CardNumber,
                cvv = basketOrderModel.CardDetails.Cvv,
                expirationMonth = basketOrderModel.CardDetails.ExpirationMonth,
                expirationYear = basketOrderModel.CardDetails.ExpirationYear
            }));
        }
Example #4
0
 public async Task <IActionResult> Add([FromBody] OrderDTO order)
 {
     return(Ok(await orderService.Add(order)));
 }
Example #5
0
 public IActionResult Add([FromBody] Order order)
 {
     _orderService.Add(order);
     return(Ok());
 }
 public IHttpActionResult Post(Order order)
 {
     return(HandleCallback(() => _ordersService.Add(order)));
 }
Example #7
0
        public IActionResult Post([FromBody] Order body)
        {
            var entity = _manager.Add(body);

            return(ResponseJson(entity));
        }
Example #8
0
 public IActionResult Post(OrderDto order)
 {
     orderService.Add(order);
     return(Created("", order));
 }
Example #9
0
        public async Task <ActionResult <Order> > AddOrder([FromBody] OrderDTO orderDTO)
        {
            var order = await _orderService.Add(orderDTO.UserId, orderDTO.AddressId);

            return(Ok(order));
        }
 public IActionResult Add([FromBody] OrderViewModel orderViewModel)
 {
     _orderService.Add(orderViewModel);
     return(Ok("product ordered!!!"));
 }
Example #11
0
        public IActionResult Post([FromBody] Order order)
        {
            orderService.Add(order);

            return(CreatedAtRoute(new { id = order.Id }, order));
        }
Example #12
0
        public void Post([FromBody] OrderModel model, [FromServices] IOrderService service)
        {
            model.OrderId = null;

            service.Add(model);
        }
Example #13
0
        public async Task <IActionResult> Post([FromBody] OrderViewModel value)
        {
            try
            {
                if (value.TimeSlots == null || value.TimeSlots.Count < 1)
                {
                    throw new AppException("You have not chosen any timesheets to book. " +
                                           "Please go back and select timeslots for this engineer");
                }

                var customer = _mapper.Map <CustomerAccount>(value.Customer);
                var job      = _mapper.Map <Job>(value.Job);

                var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

                //adjust from UTC to EST
                value.TimeSlots.ForEach(
                    x =>
                {
                    x.BeginDatetime = TimeZoneInfo.ConvertTimeFromUtc(x.BeginDatetime, tz);
                    x.EndDatetime   = TimeZoneInfo.ConvertTimeFromUtc(x.EndDatetime, tz);
                }
                    );

                var timeslots = _mapper.Map <List <TimeSlot> >(value.TimeSlots);

                //create or return existing customer
                customer = _customers.Add(customer);

                //create or return job
                job.CustomerId = customer.CustomerId;
                job            = _jobs.Add(job);

                //create the order entity
                var order = new Order();
                order.JobID     = job.JobId;
                order.HasPaid   = false;
                order.Signature = value.Signature;
                order.TimeSlots = timeslots;

                //add to persistance store
                //convert return model into viewmodel for further processing
                var added = RefreshViewModel(
                    _orders.Add(order)
                    );

                //TODO: Port the emails to a queue based solution
                //create and send invoice
                string body = await _razor.RenderViewToStringAsync("/Email/Templates/Invoice.cshtml", added);

                _email.SendMail(new List <string>()
                {
                    customer.Email
                }, new List <string>(), new List <string>()
                {
                    _BccEmail
                },
                                _invoiceSubject, body);


                return(StatusCode((int)HttpStatusCode.Created, added));
            }
            catch (AppException ex)
            {
                return(StatusCode((int)HttpStatusCode.UnprocessableEntity, new AppException(ex.Message)));
            }
            catch (Exception ex)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, new AppException(ex.Message)));
            }
        }
Example #14
0
 public void Add([FromBody] OrderViewModel order)
 {
     _service.Add(order);
 }
Example #15
0
        public ActionResult CreateOrder(string orderViewModel)
        {
            if (!Request.IsAuthenticated)
            {
                TempData["UnAuthenticated"] = "Bạn phải đăng nhập để thanh toán";
                return(Json(new { status = false }));
            }
            var  order    = new JavaScriptSerializer().Deserialize <OrderViewModel>(orderViewModel);
            var  orderNew = new Order();
            bool isEnough = true;

            orderNew.UpdateOrder(order);
            if (Request.IsAuthenticated)
            {
                var userId = User.Identity.GetUserId();
                orderNew.CustomerId = userId;
                orderNew.CreatedBy  = User.Identity.GetUserName();
            }
            var cart         = (List <ShoppingCartViewModel>)Session[CommonConstants.ShoppingCartSession];
            var orderDetails = new List <OrderDetail>();

            foreach (var item in cart)
            {
                var detail = new OrderDetail
                {
                    ProductID = item.ProductId,
                    Quantity  = item.Quantity,
                    Price     = item.Product.Price
                };
                orderDetails.Add(detail);
                isEnough = _productService.SellingProduct(item.ProductId, item.Quantity);
            }
            if (!isEnough)
            {
                return(Json(new
                {
                    status = false,
                    message = "Sản phẩm này hiện tại đang hết hàng."
                }));
            }

            var orderReturn = _orderService.Add(ref orderNew, orderDetails);

            _orderService.SaveChanges();

            var totalAmount = orderDetails.Sum(x => x.Quantity * x.Price).ToString();

            Session["totalAmount"] = totalAmount;

            if (order.PaymentMethod == "CASH")
            {
                ApplySendHtmlOrder();
                return(Json(new
                {
                    status = true
                }));
            }


            var currentLink = ConfigHelper.GetByKey("CurrentLink");
            var info        = new RequestInfo
            {
                Merchant_id       = _merchantId,
                Merchant_password = _merchantPassword,
                Receiver_email    = _merchantEmail,
                cur_code          = "vnd",
                bank_code         = order.BankCode,
                Order_code        = orderReturn.ID.ToString(),
                Total_amount      = totalAmount,
                fee_shipping      = "0",
                Discount_amount   = "0",
                order_description = "Thanh toán đơn hàng tại uStora shop",
                return_url        = currentLink + "/xac-nhan-don-hang.htm",
                cancel_url        = currentLink + "/huy-don-hang.htm",
                Buyer_fullname    = order.CustomerName,
                Buyer_email       = order.CustomerEmail,
                Buyer_mobile      = order.CustomerMobile
            };

            Session["OrderId"] = orderReturn.ID;

            var objNlChecout = new APICheckout();
            var result       = objNlChecout.GetUrlCheckout(info, order.PaymentMethod);

            if (result.Error_code == "00")
            {
                return(Json(new
                {
                    status = true,
                    urlCheckout = result.Checkout_url,
                    message = result.Description
                }));
            }
            return(Json(new
            {
                status = false,
                message = result.Description
            }));
        }
Example #16
0
 public async Task <Order> Add(Guid id) => await _orderService.Add(id);
        public async Task <ActionResult <Order> > Post(Order ent)
        {
            await _svc.Add(ent);

            return(CreatedAtAction("Get", new { id = ent.Id }, ent));
        }
        public async Task <ActionResult> PlaceOrder()
        {
            Payment       createdPayment = null;
            List <CartVM> lstcartVM      = Session["cart"] as List <CartVM>;

            DomainModels.Order order = new DomainModels.Order();

            var     userManager = HttpContext.GetOwinContext().GetUserManager <AppUserManager>();
            AppUser user        = await userManager.FindByNameAsync(User.Identity.Name);

            if (user != null)
            {
                order.UserId    = user.Id;
                order.CreatedAt = DateTime.Now;
                _orderservice.Add(order);

                OrderDetail orderDetail = new OrderDetail();
                foreach (var item in lstcartVM)
                {
                    orderDetail.OrderId   = order.OrderID;
                    orderDetail.UserId    = order.UserId;
                    orderDetail.ProductId = item.ProductId;
                    orderDetail.Quantity  = item.Quantity;
                    _orderdetailservice.AddOrderDetail(orderDetail);
                }
            }

            #region Paypal
            var apiContext = GetApiContext();

            decimal totalCost = lstcartVM.Sum(p => p.Price * p.Quantity) * 100m;

            var payment = new Payment
            {
                experience_profile_id = AppConstants.experienceprofile,
                intent = "sale",
                payer  = new Payer
                {
                    payment_method = "paypal"
                },
                transactions = new List <Transaction>
                {
                    new Transaction
                    {
                        description = "Single Payment WebShop",
                        amount      = new Amount
                        {
                            currency = "EUR",
                            total    = (totalCost / 100.00m).ToString(),
                        },
                        item_list = CreatePaypalItemListOrders(lstcartVM)
                    }
                },
                redirect_urls = new RedirectUrls
                {
                    return_url = Url.Action("Return", "Cart", null, Request.Url.Scheme),
                    cancel_url = Url.Action("Cancel", "Cart", null, Request.Url.Scheme)
                }
            };

            try
            {
                createdPayment        = payment.Create(apiContext);
                order.PayPalReference = createdPayment.id;
                _orderservice.Edit(order);
            }
            catch (PayPal.PaymentsException Ex)
            {
                Debug.WriteLine(Ex.ToString());
            }

            var approvalUrl = createdPayment.links.FirstOrDefault(x => x.rel.Equals("approval_url", StringComparison.OrdinalIgnoreCase));
            #endregion Paypal

            Session["cart"] = null;
            return(Redirect(approvalUrl.href));
        }
 public Orders Post([FromBody] Orders order)
 {
     _orderService.Add(order);
     return(order);
 }
Example #20
0
        private void DoArbitrage(Observation observation, ArbitrageInfo info)
        {
            var volume = Math.Min(observation.PerVolume, observation.AvailabeVolume);

            volume = Math.Min(volume, info.SpreadVolume);

            var orderBuyId  = Guid.NewGuid();
            var orderSellId = Guid.NewGuid();
            var buyRequest  = new OrderRequest()
            {
                ClientOrderId = orderBuyId.ToString(),
                CurrencyPair  = observation.CurrencyPair,
                OrderType     = OrderType.Market,
                Price         = 0m,
                TradeType     = TradeType.Buy,
                Volume        = volume,
            };
            var sellRequest = new OrderRequest()
            {
                ClientOrderId = orderSellId.ToString(),
                CurrencyPair  = observation.CurrencyPair,
                OrderType     = OrderType.Market,
                Price         = 0m,
                TradeType     = TradeType.Sell,
                Volume        = volume,
            };
            var buyResult  = _exchangeTradeService.MakeANewOrder(observation.FromExchangeName, buyRequest);
            var sellResult = _exchangeTradeService.MakeANewOrder(observation.ToExchangeName, sellRequest);

            if (!buyResult.IsSuccessful)
            {
                var message = $"Make a buy failed {buyResult.Message} {observation.GetName()}";
                _messageService.Error(observation.Id, observation.Name, message);
                observation.RunningStatus = RunningStatus.Error;
                _logger.LogError(message);
            }
            if (!sellResult.IsSuccessful)
            {
                var message = $"Make a sell order failed {sellResult.Message} {observation.GetName()}";
                _messageService.Error(observation.Id, observation.Name, message);
                observation.RunningStatus = RunningStatus.Error;
                _logger.LogError(message);
            }
            if (buyResult.IsSuccessful ^ sellResult.IsSuccessful)
            {
                var message = $"only one order is executed!!!! buy {buyResult.IsSuccessful} sell {sellResult.IsSuccessful}  {observation.GetName()}";
                _messageService.Error(observation.Id, observation.Name, message);
                _logger.LogCritical(message);
            }
            if (buyResult.IsSuccessful && sellResult.IsSuccessful)
            {
                _observationService.SubtractAvailabeVolume(observation.Id, volume);

                var arbitrage = new Arbitrage
                {
                    DateCreated     = DateTime.UtcNow,
                    Id              = Guid.NewGuid(),
                    ObservationId   = observation.Id,
                    ObservationName = observation.Name,
                    Volume          = volume,
                    Spread          = info.SpreadValue
                };
                _arbitrageService.Add(arbitrage);

                var buyOrder = new Order
                {
                    ArbitrageId     = arbitrage.Id,
                    ObservationId   = arbitrage.ObservationId,
                    ObservationName = arbitrage.ObservationName,
                    DateCreated     = DateTime.UtcNow,
                    ExchangeName    = observation.FromExchangeName,
                    Id           = Guid.NewGuid(),
                    OrderStatus  = buyResult.Data.Status,
                    Price        = info.FromPrice,
                    RemoteId     = buyResult.Data.Id,
                    CurrencyPair = observation.CurrencyPair,
                    TradeType    = TradeType.Buy,
                    Volume       = volume,
                };
                var sellOrder = new Order
                {
                    ArbitrageId     = arbitrage.Id,
                    ObservationId   = arbitrage.ObservationId,
                    ObservationName = arbitrage.ObservationName,
                    DateCreated     = DateTime.UtcNow,
                    ExchangeName    = observation.ToExchangeName,
                    Id           = Guid.NewGuid(),
                    OrderStatus  = buyResult.Data.Status,
                    Price        = info.ToPrice,
                    RemoteId     = buyResult.Data.Id,
                    CurrencyPair = observation.CurrencyPair,
                    TradeType    = TradeType.Sell,
                    Volume       = volume
                };
                _orderService.Add(buyOrder, sellOrder);
                _messageService.Write(observation.Id, observation.Name, $"{observation.Name} do a arbitrage spreadValue:{info.SpreadValue:f2} volume:{volume:f5} {DateTime.UtcNow}");
            }
        }
        public IActionResult Post([FromBody] SalesOrderHeader order)
        {
            orderService.Add(order);

            return(CreatedAtAction("GetById", new { Id = order.SalesOrderId }, order));
        }
 public IActionResult Post([FromBody] OrderModel order)
 {
     order.UserId = GetAuthorizedUserId();
     _orderService.Add(order);
     return(Ok(order));
 }
Example #23
0
        public async Task <IActionResult> Store([FromRoute] int productId)
        {
            if (HttpContext.Session.TryGetValue("@order-number", out var value))
            {
                var orderNumber = new Guid(value);

                var item = new OrderItemStoreViewModel
                {
                    ProductId = productId
                };

                var itemResult = await _orderService.AddItem(orderNumber, item);

                if (itemResult.IsFailure)
                {
                    TempData["Failure"] = "Não foi possível adicionar o produto no carrinho";

                    return(RedirectToAction("Index", "Product"));
                }

                TempData["Success"] = "Produto adicionado ao carrinho";

                var countResult = await _orderService.CountNumberOfItems(orderNumber);

                if (countResult.IsFailure)
                {
                    TempData["Failure"] = "Não foi possível atualizar o carrinho";

                    return(RedirectToAction("Index", "Product"));
                }

                HttpContext.Session.SetInt32("@order-items-count", countResult.Value);

                return(RedirectToAction("Index", "Product"));
            }

            var order = new OrderStoreViewModel
            {
                Number = Guid.NewGuid()
            };

            var orderCreateResult = await _orderService.Add(order);

            if (orderCreateResult.IsFailure)
            {
                TempData["Failure"] = "Não foi possível adicionar o produto no carrinho";

                return(RedirectToAction("Index", "Product"));
            }

            HttpContext.Session.Set("@order-number", order.Number.ToByteArray());

            var orderItem = new OrderItemStoreViewModel
            {
                ProductId = productId
            };

            var orderItemCreateResult = await _orderService.AddItem(order.Number, orderItem);

            if (orderItemCreateResult.IsFailure)
            {
                TempData["Failure"] = "Não foi possível adicionar o produto no carrinho";

                return(RedirectToAction("Index", "Product"));
            }

            TempData["Success"] = "Produto adicionado ao carrinho";

            var orderItemCountResult = await _orderService.CountNumberOfItems(order.Number);

            if (orderItemCountResult.IsFailure)
            {
                TempData["Failure"] = "Não foi possível atualizar o carrinho";

                return(RedirectToAction("Index", "Product"));
            }

            HttpContext.Session.SetInt32("@order-items-count", orderItemCountResult.Value);

            return(RedirectToAction("Index", "Product"));
        }