public async Task <IActionResult> PayAction(int lawyerId, int AppointmentId, [FromForm] DeliveryDetailsModel model)
        {
            if (ModelState.IsValid)
            {
                var details = await GetAppointmentDetails(AppointmentId);

                if (details != null && details.CanReserved)
                {
                    var res = await GetToken(details.Amount * 100, AppSettings.PaymentIntegrationIdCash2);

                    var order = await OrderCreation(res.Token, res.Profile.Id, details.Amount * 100, AppSettings.PaymentIntegrationIdCash2, model);

                    var pkey = await GetPaymentKey(res.Token, order.Id, details.Amount * 100, AppSettings.PaymentIntegrationIdCash2);

                    if (!string.IsNullOrEmpty(pkey.Token))
                    {
                        var bookRes = await BookSession(AppointmentId, order.Id);

                        if (bookRes == null)
                        {
                            return(RedirectToAction("Login", "Account"));
                        }
                    }
                    return(RedirectToAction("BookingSuccessful", new { txn_response_code = 0, success = true, order = order.Id, amount_cents = order.AmountCents }));
                }
                //return Ok(new { token = fToken, ptype = 2 });
            }
            return(null);
        }
        public DeliveryModel GetDeliveryByIdForConfirmation(long delivery_master_id)
        {
            var deliveryModel = new DeliveryModel();

            try
            {
                deliveryModel.DeliveryMasterData = _entities.delivery_master.Find(delivery_master_id);
                var partyInfo           = _entities.parties.Find(deliveryModel.DeliveryMasterData.party_id);
                var deliveryDetailsList = _entities.delivery_details.Where(d => d.delivery_master_id == delivery_master_id)
                                          .Join(_entities.products, jp => jp.product_id, p => p.product_id, (jp, p) => new { jp, p })
                                          .GroupJoin(_entities.colors, jc => jc.jp.color_id, c => c.color_id, (jc, c) => new { jc, nc = c.FirstOrDefault() })
                                          //.Join(_entities.units, ju => ju.jc.jp.unit_id, u => u.unit_id, (ju, u) => new { ju, u })
                                          .GroupJoin(_entities.units, ju => ju.jc.jp.unit_id, u => u.unit_id, (ju, u) => new { ju, uu = u.FirstOrDefault() })
                                          .GroupJoin(_entities.product_version, jv => jv.ju.jc.jp.product_version_id, v => v.product_version_id, (jv, v) => new { jv, nv = v.FirstOrDefault() })
                                          .ToList();
                var deliveryDetailsModels = new List <DeliveryDetailsModel>();
                deliveryModel.region_id     = partyInfo.region_id;
                deliveryModel.area_id       = partyInfo.area_id;
                deliveryModel.territory_id  = partyInfo.territory_id;
                deliveryModel.party_type_id = partyInfo.party_type_id;
                foreach (var d in deliveryDetailsList)
                {
                    var deliveryDetailsModel = new DeliveryDetailsModel();
                    deliveryDetailsModel.delivery_details_id = d.jv.ju.jc.jp.delivery_details_id;
                    deliveryDetailsModel.gift_type           = d.jv.ju.jc.jp.gift_type;
                    deliveryDetailsModel.delivery_master_id  = d.jv.ju.jc.jp.delivery_master_id;
                    deliveryDetailsModel.product_id          = d.jv.ju.jc.jp.product_id;
                    deliveryDetailsModel.product_name        = d.jv.ju.jc.p.product_name;
                    deliveryDetailsModel.color_id            = d.jv.ju.jc.jp.color_id;
                    //deliveryDetailsModel.color_name = d.jv.ju.nc.color_name;
                    deliveryDetailsModel.color_name = (d.jv.ju.nc == null) ? "" : d.jv.ju.nc.color_name;
                    //deliveryDetailsModel.unit_id = d.jv.ju.jc.jp.unit_id;
                    //deliveryDetailsModel.unit_name = d.jv.u.unit_name;
                    deliveryDetailsModel.product_version_id = d.jv.ju.jc.jp.product_version_id;
                    //deliveryDetailsModel.product_version_name = d.nv.product_version_name;
                    deliveryDetailsModel.product_version_name = (d.nv == null) ? "" : d.nv.product_version_name;
                    deliveryDetailsModel.requisition_quantity = d.jv.ju.jc.jp.requisition_quantity;
                    deliveryDetailsModel.delivered_quantity   = d.jv.ju.jc.jp.delivered_quantity;
                    deliveryDetailsModel.unit_price           = d.jv.ju.jc.jp.unit_price;
                    deliveryDetailsModel.line_total           = d.jv.ju.jc.jp.line_total;
                    deliveryDetailsModels.Add(deliveryDetailsModel);
                }
                deliveryModel.DeliveryDetailsList = deliveryDetailsModels;
                return(deliveryModel);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        private async Task <OrderResult> OrderCreation(string token, long merchantId, double amount, int integration_Id, DeliveryDetailsModel model)
        {
            string apiUrl = $"https://accept.paymobsolutions.com/api/ecommerce/orders";

            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(apiUrl);
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                var ordId = Utilities.GetUniqueKeyNums(6);
                order_id = int.Parse(ordId);

                //var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

                var bodyJS = JsonConvert.SerializeObject(new
                {
                    auth_token        = token,
                    delivery_needed   = true,
                    merchant_id       = merchantId,
                    amount_cents      = amount,
                    currency          = "EGP",
                    merchant_order_id = ordId,
                    shipping_data     = new
                    {
                        apartment    = model.Apartment,
                        email        = model.Email,
                        floor        = model.Floor,
                        first_name   = model.FirstName,//user.Name.Substring(0,user.Name.IndexOf(" ")),
                        street       = model.Address,
                        building     = model.BuildingNumber,
                        phone_number = model.Mobile,
                        postal_code  = model.PostalCode,
                        city         = "Cairo",        //ToDo
                        country      = "Egypt",
                        last_name    = model.LastName, //user.Name.Substring(user.Name.IndexOf(" ")),
                        state        = "Cairo"         //ToDo
                    }
                });
                var body = new StringContent(bodyJS, Encoding.UTF8, "application/json");
                HttpResponseMessage response = await client.PostAsync(apiUrl, body);

                if (response.IsSuccessStatusCode)
                {
                    var data = await response.Content.ReadAsStringAsync();

                    var result = JsonConvert.DeserializeObject <OrderResult>(data);
                    //await GetPaymentKey(token, result.Id, amount, integration_Id);
                    return(result);;
                }
            }
            return(null);
        }