DISPLAY ORDERS

using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using System.Xml.Linq;
using WooCommerceNET;
using WooCommerceNET.WooCommerce.Legacy;
using WooCommerceWeb.DB;
using WooCommerceWeb.Models;

namespace WooCommerceWeb.Controllers
{
    public class HomeController : Controller
    {
        public static RestAPI rest = new RestAPI("https://sbdlondon.com/wp-json/wc/v3/", "ck_fef6065e15729d76e176fe75fdada8a448f70aa5", "cs_d9fe6eb1d265a018ae69a22c71a362ac8c3b8045");
        public WCObject wc = new WCObject(rest);
        // GET: Home
        public async Task<ActionResult> Index()
        {
            return View();
        }


        public async Task<ActionResult> Processing()
        {
            List<ProcessingModel> processing = new List<ProcessingModel>();

            using (WooCommerceEntities db = new WooCommerceEntities())
            {
                var getorders = db.Orders.Select(b => b.OrderID).ToList();
                var getallorders = db.Orders.ToList();
                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("status", "processing");
                parameters.Add("page", "1");
                parameters.Add("per_page", "100");
                var productstrint = await wc.GetOrders(parameters);
                var products = JsonConvert.DeserializeObject<List<Root>>(productstrint);

                var getprocessing = products.Where(v => v.status == "processing").ToList();
                var getprocessingsave = products.Where(v => v.status == "processing" && !getorders.Contains(Convert.ToInt32(v.id))).ToList();
                foreach (var product in getprocessing)
                {

                    if (getprocessingsave.Where(v => v.id == product.id).Count() > 0)
                    {
                        DB.Order ord = new DB.Order();
                        ord.OrderID = Convert.ToInt32(product.id);
                        ord.IsParcel = false;
                        ord.IsFedex = false;
                        ord.CreatedDate = DateTime.Now;
                        ord.status = product.status;
                        var json = new JavaScriptSerializer().Serialize(product);
                        ord.Datas = json;
                        db.Orders.Add(ord);
                        db.SaveChanges();
                        processing.Add(new ProcessingModel
                        {
                            id = product.id,
                            status = product.status,
                            total = product.total,
                            TotalItem = product.line_items.Count,
                            orderdate = Convert.ToDateTime(product.date_created),
                            first_name = product.shipping != null ? product.shipping.first_name : "",
                            last_name = product.shipping != null ? product.shipping.last_name : "",
                            email = product.billing != null ? product.billing.email : "",
                            postcode = product.billing != null ? product.billing.postcode : "",
                        });
                    }
                    else
                    {
                        long projID = Convert.ToInt64(product.id.ToString());

                        var getorderss = db.Orders.Where(i =>i.OrderID  == projID).FirstOrDefault();
                        if (getorderss != null)
                        {
                            getorderss.OrderID = Convert.ToInt32(product.id);
                            getorderss.IsParcel = false;
                            getorderss.IsFedex = false;
                            getorderss.CreatedDate = DateTime.Now;
                            getorderss.status = product.status;
                            var json = new JavaScriptSerializer().Serialize(product);
                            getorderss.Datas = json;
                            db.SaveChanges();
                        }

                        processing.Add(new ProcessingModel
                        {
                            id = product.id,
                            status = getorderss.status,
                            total = product.total,
                            TotalItem = product.line_items.Count,
                            orderdate = Convert.ToDateTime(product.date_created),
                            first_name = product.shipping != null ? product.shipping.first_name : "",
                            last_name = product.shipping != null ? product.shipping.last_name : "",
                            email = product.billing != null ? product.billing.email : "",
                            postcode = product.billing != null ? product.billing.postcode : "",
                        });
                    }
                }
            }
            return View(processing);

        }

        public async Task<ActionResult> Parcel()
        {
            List<ProcessingModel> processing = new List<ProcessingModel>();

            using (WooCommerceEntities db = new WooCommerceEntities())
            {

                var getprocessingsave = db.Orders.Where(v => v.status == "PARCEL").ToList();
                foreach (var products in getprocessingsave)
                {
                    var product = JsonConvert.DeserializeObject<Root>(products.Datas);

                    processing.Add(new ProcessingModel
                    {
                        id = product.id,
                        status = product.status,
                        total = product.total,
                        TotalItem = product.line_items.Count,
                        orderdate = Convert.ToDateTime(product.date_created),
                        first_name = product.shipping != null ? product.shipping.first_name : "",
                        last_name = product.shipping != null ? product.shipping.last_name : "",
                        email = product.billing != null ? product.billing.email : "",
                        postcode = product.billing != null ? product.billing.postcode : "",
                    });
                }
            }
            return View(processing);

        }
        public async Task<ActionResult> Packing(int id)
        {

            using (WooCommerceEntities db = new WooCommerceEntities())
            {
                var getorder = db.Orders.Where(b => b.OrderID == id).FirstOrDefault();
                var getorderproccessing = db.OrderProcessings.Where(b => b.OrderID == id).Select(n => n.OrderID).ToList();
                if (getorder != null)
                {
                    getorder.status = "PARCEL";
                    getorder.IsParcel = true;
                    getorder.UpdatedDate = DateTime.Now;
                    db.SaveChanges();
                }
                var products = JsonConvert.DeserializeObject<Root>(getorder.Datas);
                foreach (var item in products.line_items.Where(b => !getorderproccessing.Contains(Convert.ToInt32(b.id))))
                {
                    List<string> list = new List<string>();
                    var productimg = await wc.GetProduct(item.product_id);
                    var productbyids = JsonConvert.DeserializeObject<ProductById>(productimg);
                    list.AddRange(productbyids.images.Select(v => v.src).ToList());
                    item.imageslist = list;
                }
                return View(products);
            }
        }
        [HttpPost]
        public async Task<ActionResult> Complete(int id, List<int> productId)
        {
            try
            {
                using (WooCommerceEntities db = new WooCommerceEntities())
                {
                    var getorder = db.Orders.Where(b => b.OrderID == id).FirstOrDefault();
                    var products = JsonConvert.DeserializeObject<WooCommerceNET.WooCommerce.Legacy.Order>(getorder.Datas);
                    //products.status = "completed";
                    Dictionary<string, string> parameters = new Dictionary<string, string>();
                    parameters.Add("status", "completed");
                    try
                    {
                        var updateproducts = await wc.UpdateOrder(id, products, parameters);

                    }
                    catch (Exception ex)
                    {
                        return Json("failed", JsonRequestBehavior.AllowGet);
                    }
                    ////var getmapperopenapi = Mappingopeapi(getorder);
                    //var createopenshi = CreateOpenShipApi(FedexAuth.access_token, getmapperopenapi);
                    // var openapiresponse = JsonConvert.DeserializeObject<OpenShipApiResponseModel>(createopenshi);
                    // var confirmapimapping = Mappingconfirmopeapi(openapiresponse, getorder);
                    // var confirmsopenship = ConfirmOpenShipApi(FedexAuth.access_token, confirmapimapping);
                    if (getorder != null)
                    {
                        foreach (var item in productId)
                        {
                            OrderProcessing ordpro = new OrderProcessing();
                            ordpro.ProductID = item;
                            ordpro.OrderID = id;
                            ordpro.CreatedDate = DateTime.Now;
                            ordpro.UpdatedDate = DateTime.Now;
                            ordpro.IsLebelGenerate = true;
                            ordpro.IsOpenApiDone = true;
                            ordpro.IsSuccess = true;
                            ordpro.IsCompleted = true;
                            db.OrderProcessings.Add(ordpro);
                            db.SaveChanges();
                        }
                        getorder.status = "Complete";
                        getorder.IsFedex = true;
                        getorder.UpdatedDate = DateTime.Now;
                        db.SaveChanges();
                    }
                    //var products = JsonConvert.DeserializeObject<Root>(getorder.Datas);
                    return Json("success", JsonRequestBehavior.AllowGet);
                }

            }
            catch (Exception)
            {

                return Json("failed", JsonRequestBehavior.AllowGet);
            }
            //var getauth = FedexAuthorization();
            //var FedexAuth = JsonConvert.DeserializeObject<FedExAuthResponse>(getauth);
        }


        private CreateOpenShipApiRequest Mappingopeapi(DB.Order req)
        {
            CreateOpenShipApiRequest mapping = new CreateOpenShipApiRequest();
            var orderdetails = JsonConvert.DeserializeObject<Root>(req.Datas);
            var addresslist = new List<string>();
            addresslist.Add(orderdetails.shipping.address_1);
            addresslist.Add(orderdetails.shipping.address_2);
            var address = new Address
            {
                streetLines = addresslist,
                city = orderdetails.shipping.city,
                stateOrProvinceCode = orderdetails.shipping.state,
                postalCode = orderdetails.shipping.postcode,
                countryCode = orderdetails.shipping.country,


            };
            var shipper = new Shipper
            {
                address = address,
                contact = new Contact
                {
                    phoneNumber = orderdetails.billing.phone,
                    personName = orderdetails.shipping.first_name + " " + orderdetails.shipping.last_name,
                    companyName = orderdetails.shipping.first_name + " " + orderdetails.shipping.last_name,
                },
            };
            var recepaddress = new Address
            {
                streetLines = addresslist,
                city = orderdetails.shipping.city,
                stateOrProvinceCode = orderdetails.shipping.state,
                postalCode = orderdetails.shipping.postcode,
                countryCode = orderdetails.shipping.country,


            };
            var recipent = new List<Recipient>();
            recipent.Add(new Recipient
            {
                address = recepaddress,
                contact = new Contact
                {
                    phoneNumber = orderdetails.billing.phone,
                    personName = orderdetails.billing.first_name + " " + orderdetails.billing.last_name,
                    companyName = orderdetails.billing.first_name + " " + orderdetails.billing.last_name,
                },
            });
            var lines = new List<RequestedPackageLineItem>();
            foreach (var line in orderdetails.line_items)
            {
                lines.Add(new RequestedPackageLineItem
                {
                    sequenceNumber = line.product_id.ToString(),
                    weight = new Weight
                    {
                        units = "KG",
                        value = 2,

                    },
                });
            }
            mapping.requestedShipment = new RequestedShipment
            {
                pickupType = "USE_SCHEDULED_PICKUP",
                serviceType = "PRIORITY_OVERNIGHT",
                packagingType = "YOUR_PACKAGING",
                shippingChargesPayment = new ShippingChargesPayment
                {
                    paymentType = "SENDER",
                },
                recipients = recipent,
                shipper = shipper,

                requestedPackageLineItems = lines,


            };
            mapping.accountNumber = new AccountNumber
            {
                value = "740561073",
            };
            return mapping;
        }
        private string FedexAuthorization()
        {
            var input1 = "grant_type=client_credentials&client_id=l7e152a1bda2ec4448ab5ecf8b5e551929&client_secret=719aa8b700f345f68f907ebe2e4e2c88";

            var client = new RestClient("https://apis-sandbox.fedex.com/oauth/token");
            var request = new RestRequest();

            request.Method = Method.Post;
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddParameter("application/x-www-form-urlencoded", input1, ParameterType.RequestBody);

            var response = client.Execute(request);
            var content = response.Content;
            return content;
        }
        private string CreateOpenShipApi(string token, CreateOpenShipApiRequest req)
        {

            var input1 = Newtonsoft.Json.JsonConvert.SerializeObject(req);

            var client = new RestClient("https://apis-sandbox.fedex.com/ship/v1/openshipments/create");
            var request = new RestRequest();
            var tokenval = "Bearer " + token;
            request.Method = Method.Post;
            request.AddHeader("Authorization", tokenval);
            request.AddHeader("x-customer-transaction-id", Guid.NewGuid());
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/x-www-form-urlencoded", input1, ParameterType.RequestBody);

            var response = client.Execute(request);
            var content = response.Content;
            return content;
        }


        private string ConfirmOpenShipApi(string token, ConfirmOpenApiRequestModel req)
        {

            var input1 = Newtonsoft.Json.JsonConvert.SerializeObject(req);

            var client = new RestClient("https://apis-sandbox.fedex.com/ship/v1/openshipments/");
            var request = new RestRequest();
            var tokenval = "Bearer " + token;
            request.Method = Method.Post;
            request.AddHeader("Authorization", tokenval);
            request.AddHeader("x-customer-transaction-id", Guid.NewGuid());
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/x-www-form-urlencoded", input1, ParameterType.RequestBody);

            var response = client.Execute(request);
            var content = response.Content;
            return content;
        }



        private ConfirmOpenApiRequestModel Mappingconfirmopeapi(OpenShipApiResponseModel confirmapi, DB.Order req)
        {
            ConfirmOpenApiRequestModel mapping = new ConfirmOpenApiRequestModel();
            var orderdetails = JsonConvert.DeserializeObject<Root>(req.Datas);
            var addresslist = new List<string>();
            addresslist.Add(orderdetails.shipping.address_1);
            addresslist.Add(orderdetails.shipping.address_2);
            var address = new Addresss
            {
                streetLines = addresslist,
                city = orderdetails.shipping.city,
                stateOrProvinceCode = orderdetails.shipping.state,
                postalCode = orderdetails.shipping.postcode,
                countryCode = orderdetails.shipping.country,


            };
            var printorgin = new PrintedLabelOrigin
            {
                address = address,
                contact = new Contacts
                {
                    phoneNumber = orderdetails.billing.phone,
                    personName = orderdetails.shipping.first_name + " " + orderdetails.shipping.last_name,
                    companyName = orderdetails.shipping.first_name + " " + orderdetails.shipping.last_name,
                },
            };
            mapping.labelResponseOptions = "LABEL";
            mapping.labelSpecification = new LabelSpecification
            {
                labelStockType = "PAPER_4X6",
                imageType = "PNG",
                printedLabelOrigin = printorgin
            };
            mapping.index = confirmapi.output.transactionShipments.Select(v => v.masterTrackingNumber).FirstOrDefault();
            mapping.accountNumber = new AccountNumber
            {
                value = "740561073",
            };
            return mapping;
        }

        [HttpGet]
        public async Task<JsonResult> GetOrderbyOrderId(int orderid)
        {
            using (WooCommerceEntities db = new WooCommerceEntities())
            {
                var getorder = db.Orders.Where(b => b.OrderID == orderid).FirstOrDefault();
                if (getorder != null)
                {
                    var products = JsonConvert.DeserializeObject<Root>(getorder.Datas);
                    products.status = getorder.status;
                    return Json(products, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json("No Record Found", JsonRequestBehavior.AllowGet);

                }
            }
        }
    }
}

Working. Dont touch.

The content off the shipping label is wrong? @luke-lindsay – Fix it please. Recall the Schema from the Dev portal. Must be adhered too.

Go to the schema. https://developer.fedex.com/api/en-gb/catalog/open-ship/v1/docs.html

Share


Categories

Leave a Reply

Your email address will not be published. Required fields are marked *