public async Task <IActionResult> AddTempBasket([FromBody] TempOrderDTO model) { var findUser = await _userService.FindAsync(model.UserToken); if (!findUser.IsSuccessful) { return(Json(new Response <string> { Message = Strings.InvalidToken })); } var addOrder = await _orderService.AddTempBasket(model); 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.OrderId, Amount = addOrder.Result.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.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.OrderId } })); } return(Json(new Response <AddOrderReponse> { IsSuccessful = true, Result = new AddOrderReponse { OrderId = addOrder.Result.OrderId, Url = createTrans.Result.GatewayUrl } })); }
public async Task <IResponse <Order> > AddTempBasket(TempOrderDTO model) { var getItems = _tempOrderDetailSrv.Get(model.BasketId); if (!getItems.IsSuccessful) { return new Response <Order> { Message = getItems.Message } } ; var productId = getItems.Result.Where(x => x.Count != 0).First().Id; var store = await _appUow.ProductRepo.FirstOrDefaultAsync(x => new { x.StoreId, x.Store.AddressId }, x => x.ProductId == productId); if (store == null) { return new Response <Order> { Message = ServiceMessage.RecordNotExist } } ; var address = await _appUow.AddressRepo.FindAsync(store.AddressId); if (address == null) { await _appUow.AddressRepo.FindAsync(store.AddressId); } var getDeliveryCost = await _deliverySrv.GetDeliveryCost(model.DeliveryId, store.StoreId, new LocationDTO { Lat = model.Address.Lat, Lng = model.Address.Lng }); if (!getDeliveryCost.IsSuccessful) { return new Response <Order> { Message = getDeliveryCost.Message } } ; var orderDetails = getItems.Result.Where(x => x.Count != 0).Select(i => new OrderDetail { ProductId = i.Id, Count = i.Count, Price = i.Price, TotalPrice = i.RealPrice * i.Count, DiscountPrice = i.DiscountPrice, DiscountPercent = i.Discount }).ToList(); var order = new Order { StoreId = store.StoreId, TotalPrice = orderDetails.Sum(x => x.Price * x.Count), TotalPriceAfterDiscount = orderDetails.Sum(x => x.TotalPrice) + getDeliveryCost.Result, UserId = model.UserToken, DiscountPrice = orderDetails.Sum(x => x.DiscountPrice), OrderStatus = OrderStatus.WaitForPayment, DeliveryProviderId = model.DeliveryId, OrderComment = model.Description, UserComment = new UserComment { Reciever = model.Reciever, RecieverMobileNumber = model.RecieverMobileNumber }.SerializeToJson(), ToAddressId = model.Address.Id ?? 0, ToAddress = model.Address.Id == null ? new Address { UserId = model.UserToken, AddressType = AddressType.Home, Latitude = model.Address.Lat, Longitude = model.Address.Lng, AddressDetails = model.Address.Address } : null, FromAddressId = store.AddressId ?? 0, OrderDetails = orderDetails }; await _orderRepo.AddAsync(order); var addOrder = await _appUow.ElkSaveChangesAsync(); if (!addOrder.IsSuccessful) { return new Response <Order> { Message = addOrder.Message } } ; return(new Response <Order> { IsSuccessful = true, Result = order }); }