Beispiel #1
0
 /// <summary>
 /// Create Order For Shipment
 /// </summary>
 /// <param name="obj">Dorship (Shipment details)</param>
 /// <returns>Shipment Order Response</returns>
 public async Task <DataResult <Shipment_Order_Response> > Create_Order_For_Shipment(Dorship obj)
 {
     client.ClearHeaders();
     client.AddHeader("Authorization", Constant.FetchrAuthToken);
     return(await client.PostData_WithStatusCode_Async <Shipment_Order_Response>(string.Format("{0}orders/dropship", BaseUrl), obj));
 }
        public async Task <JsonResult> Create_Shipment_Order([FromBody] Shipment obj)
        {
            bool shipment_status = false;
            var  result          = new Models.DataProvider.DbResult();
            var  cart            = await _shop_repo.Shopping_Cart_Tracking_Get_By_Id(obj.Cart_Id);

            if (!cart.Status.Equals("Pending"))
            {
                result.Message = "Order already created."; return(Json(result));
            }

            var addr = await _addr_repo.Get_By_Id(cart.Shipping_Address_Id);

            cart.ShippingAddress = addr;
            string mobile = string.IsNullOrEmpty(addr.Mobile) ? string.Empty : addr.Mobile.StartsWith("+") ? addr.Mobile : string.Format("+{0}{1}", addr.ISDCode, addr.PhoneNumber);

            if (cart.CartType == "Shopping")
            {
                var dorship   = new Dorship(cart.Id, obj.PaymentType);
                var order_rec = new Receiver_Data(addr.Full_Name, mobile, cart.Email, addr.Country, addr.State, addr.City, addr.Address_Line, addr.ZipCode);
                order_rec.Street_Two  = addr.Address_Line2; order_rec.Street_Three = addr.Address_Line3;
                dorship.Receiver_Data = order_rec;

                var packages = new List <Package_Data>();

                foreach (var x in cart.ShopingCart)
                {
                    decimal price   = (obj.PaymentType == "cc") ? 0 : x.TotalPrice;
                    var     package = new Package_Data(x.SKU, price, x.Product_Name);
                    packages.Add(package);
                }
                dorship.Package_Data = packages;
                var shipment = await _fetchr.Create_Order_For_Shipment(dorship);

                if (shipment.Success)
                {
                    if (shipment.Data.Success)
                    {
                        result.Message = "Order created successfully.";
                        result.Success = shipment_status = true;
                        foreach (var x in shipment.Data.Dorship.Package_Data)
                        {
                            var abc = _shop_repo.Update_Shipment_Id(x.Tracking_No, shipment.Data.Dorship.Order_Reference, x.Package_Reference);
                            abc.Wait();
                        }
                        var ord = await _shop_repo.Shopping_Cart_Tracking_Update_Order_Status(obj.Cart_Id, shipment_status, obj.PaymentType, "Order Created");

                        var invoice_template = _emailSender.GetMailTemplate(cart, "invoice.cshtml");
                        var file             = Utility.Create_Invoice(invoice_template, cart.Id);
                        var invoice_path     = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Resources", "Invoice", string.Format("{0}.pdf", cart.Id));
                        var html_template    = _emailSender.GetMailTemplate(cart, "order-confirmation.cshtml");
                        var mailResult       = await _emailSender.Send_Email_With_Attachement(cart.Name, cart.Email, "Order Confirmation", html_template, invoice_path);
                    }
                }
                else
                {
                    result.Message = shipment.Content;
                    await ExceptionGateway.AddExceptionAsync(new ExceptionLog(new Exception(string.Format("Error: Create_Order_For_Shipment, Id: {0}", obj.Cart_Id)), shipment.Content));
                }
            }

            if (cart.CartType == "Selling")
            {
                var pickup      = new PickUp();
                var pickup_data = new PickUp_Data {
                    Email = cart.Email, Phone_Number = mobile, Name = addr.Full_Name
                };
                pickup_data.Address         = string.Format("{0}, {1}", addr.Address_Line, addr.Area);
                pickup_data.City            = addr.City;
                pickup_data.Country         = addr.Country;
                pickup_data.Order_Reference = cart.Id;
                foreach (var item in cart.SellingCart)
                {
                    pickup_data.Product_Items.Add(new PickUp_Product {
                        Product_Description = string.Format("{0}, {1} ({2})", item.Product_Name, item.Product_TypeName, item.Product_Type)
                    });
                }
                pickup.Data.Add(pickup_data);

                var shipment = await _fetchr.Create_PickUp_Order(pickup);

                if (shipment.Success)
                {
                    if (shipment.Data.Success)
                    {
                        var resp = shipment.Data;
                        result.Message = "Order created successfully.";
                        result.Success = shipment_status = resp.Success;
                        if (shipment_status)
                        {
                            var abc = _shop_repo.Update_Shipment_Id_Pickup(resp.Tracking_Id, resp.Order_Reference);
                            abc.Wait();
                            var payment = await _pay_repo.Get();

                            await _credit_repo.Add_New(new Credit { Amount = cart.Total_Sum *payment.Credit_Ratio, IsBlocked = true, Trancaction_Id = obj.Cart_Id, Transaction_Type = "CREDIT", Transaction_For = "Selling", UserId = cart.UserId, Comments = string.Format("Added Credit for Order #{0}", obj.Cart_Id) });

                            var ord = await _shop_repo.Shopping_Cart_Tracking_Update_Order_Status(obj.Cart_Id, shipment_status, obj.PaymentType, "Order Created");

                            var invoice_template = _emailSender.GetMailTemplate(cart, "invoice.cshtml");
                            var file             = Utility.Create_Invoice(invoice_template, cart.Id);
                            var invoice_path     = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Resources", "Invoice", string.Format("{0}.pdf", cart.Id));
                            var html_template    = _emailSender.GetMailTemplate(cart, "order-confirmation.cshtml");
                            var mailResult       = await _emailSender.Send_Email_With_Attachement(cart.Name, cart.Email, "Order Confirmation", html_template, invoice_path);
                        }
                    }
                }
                else
                {
                    result.Message = shipment.Content;
                    await ExceptionGateway.AddExceptionAsync(new ExceptionLog(new Exception(string.Format("Error: Create_Order_For_Shipment, Id: {0}", obj.Cart_Id)), shipment.Content));
                }
            }
            return(Json(result));
        }