예제 #1
0
        /// <summary>
        /// tidy up code to populate RestRequest to query label images
        /// </summary>
        /// <param name="req"></param>
        /// <param name="label"></param>
        public void RequestPopulating(RestRequest req, Labeldetails label)
        {
            req.AddParameter("api_key", label.apiKey);

            req.AddParameter("toCompany", label.toCompany);
            req.AddParameter("toAddress1", label.toAddress1);
            req.AddParameter("toCity", label.toCity);
            req.AddParameter("toPostCode", label.toPostcode);

            req.AddParameter("specialInstruction1", label.specialInstruction1);
            req.AddParameter("contactName", label.toContactName);
            req.AddParameter("contactPhone", label.toContactPhone);

            req.AddParameter("fromCompanyName", label.fromCompany);
            req.AddParameter("fromAddress1", label.fromAddress1);
            req.AddParameter("fromCity", label.fromCity);


            req.AddParameter("labelDate", DateTime.Now.AddMinutes(720).ToString("dd/MM/yyyy"));
            req.AddParameter("destRF", label.toRfName);

            req.AddParameter("Type", "Image");
        }
        public JsonResult MultiLabelPrinting(string ShopUrl, string Instruction, float Weight, string Labels, string Reference, string FullDetails)
        {
            //DB connection to query store details
            DbEngine newDB = new DbEngine();
            //get store details with provided url
            StoreRecord storeDetails = newDB.GetShopRecord(ShopUrl);
            //Labeldetails entity to query
            Labeldetails label = new Labeldetails();

            ///populate store details for query
            label.apiKey      = storeDetails.FastwayApiKey;
            label.fromCompany = storeDetails.StoreName;

            if (storeDetails.Phone != "" && storeDetails.Phone != null && storeDetails.Phone != "null")
            {
                label.fromPhone = storeDetails.Phone;
            }
            label.fromAddress1        = storeDetails.StoreAddress1;
            label.fromCity            = storeDetails.Suburb;
            label.fromPostcode        = storeDetails.Postcode;
            label.weight              = Math.Ceiling(Weight * 100) / 100;
            label.specialInstruction1 = Instruction;
            label.countryCode         = storeDetails.CountryCode;

            //parsing the labels addresses details
            JArray ls  = JArray.Parse(Labels);
            JArray fds = JArray.Parse(FullDetails);

            List <string> references = Reference.Split(',').ToList();

            List <Labeldetails> labelDetails = new List <Labeldetails>();

            for (var i = 0; i < ls.Count; i++)
            {
                if (ls[i]["BaseLabel"].ToString() != "")
                {
                    Labeldetails l = label;
                    if (ls[i]["Company"].ToString() != "" && ls[i]["Company"].ToString() != null && ls[i]["Company"].ToString() != "null")
                    {
                        l.toCompany     = ls[i]["Company"].ToString();
                        l.toContactName = ls[i]["Name"].ToString();
                    }
                    else
                    {
                        l.toCompany = ls[i]["Name"].ToString();
                    }

                    if (references.Count > 0)
                    {
                        l.reference = references[i];
                    }

                    l.toAddress1 = ls[i]["Address1"].ToString();
                    l.toAddress2 = ls[i]["Address2"].ToString();
                    l.toPostcode = ls[i]["Postcode"].ToString();
                    l.toCity     = ls[i]["Suburb"].ToString();

                    l.labelColour = ls[i]["Service"].ToString();
                    l.labelNumber = ls[i]["BaseLabel"].ToString();
                    l.ruralNumber = ls[i]["RuralLabel"].ToString();

                    l.toRfName = ls[i]["Destination"].ToString();

                    labelDetails.Add(l);
                }
            }

            try
            {
                PdfDocument doc = new PdfDocument();
                if (labelDetails.Count > 0)
                {
                    FastwayAPI getBase = new FastwayAPI();
                    doc = getBase.PrintMultipleLabels(labelDetails, doc);
                }

                MemoryStream pdfStream = new MemoryStream();
                doc.Save(pdfStream, false);
                byte[] pdfBytes = pdfStream.ToArray();

                var pdfString = Convert.ToBase64String(pdfBytes);


                return(Json(new
                {//return status success
                    PdfBase64Stream = pdfString
                }));
            }
            catch (Exception e)
            {     //error
                return(Json(new
                { //return status success
                    Error = e.Message
                }));
            }
        }
        public JsonResult MultiLabelQuery(string ShopUrl, string Address1, string Address2, string Suburb, string Postcode, float Weight, string Instruction, string Type)
        {
            //DB connection to query store details
            DbEngine newDB = new DbEngine();
            //get store details with provided url
            StoreRecord storeDetails = newDB.GetShopRecord(ShopUrl);
            //Labeldetails entity to query
            Labeldetails label = new Labeldetails();

            //populate store details for query
            label.apiKey       = storeDetails.FastwayApiKey;
            label.fromAddress1 = storeDetails.StoreAddress1;
            label.fromCity     = storeDetails.Suburb;
            label.fromPostcode = storeDetails.Postcode;
            //populate delivery details for query
            label.toAddress1 = Address1;
            label.toAddress2 = Address2;
            label.toCity     = Suburb;
            label.toPostcode = Postcode;
            //populate parcel details for query
            label.weight      = (double)Weight;
            label.countryCode = storeDetails.CountryCode;

            List <string> labelNumbers = new List <string>();
            string        destRF       = "";

            try
            {
                if (Type != "Parcel")
                {
                    if (Weight > 5)
                    {
                        labelNumbers.Add("No Service Found");
                    }
                    else
                    {
                        label.specialInstruction1 = Instruction;

                        //new fastwayAPI object to query
                        FastwayAPI getLabel = new FastwayAPI();
                        //get label with V2 method
                        Labeldetails l = new Labeldetails();

                        if (Type == "SAT-NAT-A3")
                        {
                            List <UsableLabel> services = getLabel.ServiceQuery(label);
                            if (services.First().BaseLabelColour == "BROWN")
                            {
                                label.labelColour = services[services.FindIndex(a => a.BaseLabelColour == "SAT-LOC-A3")].BaseLabelColour;
                            }
                            else
                            {
                                label.labelColour = Type;
                            }
                        }
                        else
                        {
                            label.labelColour = Type;
                        }
                        l = getLabel.LabelQueryV2(label);
                        labelNumbers.Add(l.labelNumber);
                        labelNumbers.Add(l.ruralNumber);
                        destRF = l.toRfName;
                    }
                }
                else
                {
                    //new fastwayAPI object to query
                    FastwayAPI getLabel = new FastwayAPI();
                    //get label with V2 method
                    Labeldetails       l        = new Labeldetails();
                    List <UsableLabel> services = getLabel.ServiceQuery(label);
                    label.labelColour = services.First().BaseLabelColour;
                    l = getLabel.LabelQueryV2(label);
                    labelNumbers.Add(l.labelNumber);
                    labelNumbers.Add(l.ruralNumber);
                    destRF = l.toRfName;
                }
            }
            catch (Exception)
            {
                labelNumbers.Add("No Service Found");
            }
            return(Json(new
            {//return details about availabel service
                BaseLabel = labelNumbers[0],
                RuralLabel = labelNumbers[1],
                Service = label.labelColour,
                DestRF = destRF
            }));
        }
        public JsonResult LabelPrintingV2(string ShopUrl, string DeliveryDetails, string PackagingDetails, bool Saturday)
        {
            //labeldetails object to call Fastway API
            Labeldetails label = new Labeldetails();
            //DB connection to query sender details
            DbEngine conn = new DbEngine();

            label.apiKey = conn.GetStringValues(ShopUrl, "FastwayApiKey");
            //assign sender details
            label.fromAddress1 = conn.GetStringValues(ShopUrl, "StoreAddress1");
            label.fromPostcode = conn.GetStringValues(ShopUrl, "Postcode");
            label.fromCity     = conn.GetStringValues(ShopUrl, "Suburb");
            label.fromCompany  = conn.GetStringValues(ShopUrl, "StoreName");
            label.countryCode  = conn.GetIntergerValues(ShopUrl, "CountryCode");
            label.fromPhone    = conn.GetStringValues(ShopUrl, "Phone");

            //parse delivery details
            JObject d = JObject.Parse(DeliveryDetails);

            //assign receiver details
            label.toAddress1 = d["Address1"].ToString();
            label.toAddress2 = d["Address2"].ToString();
            label.toPostcode = d["Postcode"].ToString();
            label.toCity     = d["Suburb"].ToString();

            label.specialInstruction1 = d["SpecialInstruction1"].ToString();

            if (d["Company"].ToString() != "" && d["Company"].ToString() != "null" && d["Company"].ToString() != null)
            {
                label.toCompany     = d["Company"].ToString();
                label.toContactName = d["ContactName"].ToString();
            }
            else
            {
                label.toCompany = d["ContactName"].ToString();
            }

            label.toContactPhone = d["ContactPhone"].ToString();
            //pull through email address for expect messaging
            label.toEmail = d["ContactEmail"].ToString();

            //parse packaging details
            JArray p = JArray.Parse(PackagingDetails);
            //list of labelDetails that hold the labels being used
            List <Labeldetails> labelDetails = new List <Labeldetails>();
            List <string>       labelNumbers = new List <string>();



            for (int i = 0; i < p.Count; i++)
            {
                for (int j = 0; j < (int)p[i]["Items"]; j++)
                {
                    //package details
                    label.weight      = (double)p[i]["Weight"];
                    label.labelColour = p[i]["BaseLabel"].ToString();
                    label.reference   = p[i]["Reference"].ToString();
                    label.saturday    = Saturday;

                    //new fastwayAPI object to query
                    FastwayAPI getLabel = new FastwayAPI();
                    //get label with V2 method
                    Labeldetails l = new Labeldetails();
                    l = getLabel.LabelQueryV2(label);
                    labelDetails.Add(l);
                    labelNumbers.Add(l.labelNumber);
                }
            }

            PdfDocument doc = new PdfDocument();

            if (labelDetails.Count > 0)
            {
                FastwayAPI getBase = new FastwayAPI();
                doc = getBase.PrintLabels(labelDetails, doc);
            }

            MemoryStream pdfStream = new MemoryStream();

            doc.Save(pdfStream, false);
            byte[] pdfBytes = pdfStream.ToArray();

            var pdfString = Convert.ToBase64String(pdfBytes);

            try
            {
                return(Json(new
                {//return status success
                    Labels = String.Join(",", labelNumbers),
                    PdfBase64Stream = pdfString
                }));
            }
            catch (Exception e)
            {//error
                throw e;
            }
        }
        public JsonResult LabelQuery(string ShopUrl, string Address1, string Address2, string Suburb, string Postcode, string Region, float Weight, string Type)
        {
            //DB connection to query store details
            DbEngine newDB = new DbEngine();
            //get store details with provided url
            StoreRecord storeDetails = newDB.GetShopRecord(ShopUrl);
            //Labeldetails entity to query
            Labeldetails label = new Labeldetails();

            //populate store details for query
            label.apiKey       = storeDetails.FastwayApiKey;
            label.fromAddress1 = storeDetails.StoreAddress1;
            label.fromCity     = storeDetails.Suburb;
            label.fromPostcode = storeDetails.Postcode;
            //populate delivery details for query
            label.toAddress1 = Address1;
            label.toAddress2 = Address2;
            label.toCity     = Suburb;
            label.toPostcode = Postcode;
            //populate parcel details for query
            label.weight      = (double)Weight;
            label.countryCode = storeDetails.CountryCode;
            //FastwayAPI object for service query
            FastwayAPI newApiCall = new FastwayAPI();
            //Call fastway API and receive back a list of available service
            List <UsableLabel> services = newApiCall.ServiceQuery(label);
            //UsableLabel entity to respond
            UsableLabel service = new UsableLabel();

            try
            {
                if (services.First().CostexgstTotalChargeToEndUser != 0)
                {         //if no service found
                    if (services.Count == 1 && Type != "Parcel")
                    {     //no service and type was "Parcel"
                        return(Json(new
                        { //return an Error code
                            Error = "No Service Available"
                        }));
                    }
                    else//service(s) available
                    {
                        if (Type == "Parcel")
                        {//type was "Parcel", assign parcel option to response json
                            service = services.First();
                        }
                        else
                        {//type was NOT "Parcel", get service based on value of Type
                            if (Type == "SAT-NAT-A3")
                            {
                                if (services.First().BaseLabelColour == "BROWN")
                                {
                                    service = services[services.FindIndex(a => a.BaseLabelColour == "SAT-LOC-A3")];
                                }
                                else
                                {
                                    service = services[services.FindIndex(a => a.BaseLabelColour == Type)];
                                }
                            }
                            else
                            {
                                service = services[services.FindIndex(a => a.BaseLabelColour == Type)];
                            }
                        }
                        return(Json(new
                        {//return details about availabel service
                            BaseLabelColour = service.BaseLabelColour,
                            TotalCost = service.CostexgstTotalChargeToEndUser,
                            Rural = service.RuralLabelCostExgst > 0 ? true : false,
                            Excess = service.ExcessLabelCount,
                            Saturday = services.First().Saturday
                        }));
                    }
                }
                else
                {
                    return(Json(new
                    {//Error code from Fastway NOTE: will need to handle different type of error HERE
                        Error = "No Service Available"
                    }));
                }
            }
            catch (Exception e)
            {
                //general error code Note: will need to handle these
                throw e;
            }
        }
예제 #6
0
        /// <summary>
        /// Method to query for label numbers on provided details (addresses/serivce to be used)
        /// </summary>
        /// <param name="details"></param>
        /// <returns>label numbers (including rural label numbers)</returns>
        public string LabelQuery(Labeldetails details)
        {
            //string object to hold label numbers to be returned
            string label = "";
            //RestClient to make API calls
            var client = new RestClient();

            client.BaseUrl = new Uri("http://nz.api.fastway.org/v2/");
            //Request object to hold data for querying
            var request = new RestRequest();

            //API type to call
            request.Resource = "dynamiclabels/allocate-with-consignor-consignee-details";

            //populate parameters required
            request.AddParameter("api_key", details.apiKey);

            request.AddParameter("PickupName", details.fromCompany);
            request.AddParameter("PickupAddr1", details.fromAddress1);
            request.AddParameter("PickupPostcode", details.fromPostcode);
            request.AddParameter("PickupTown", details.fromCity);

            request.AddParameter("DeliveryContactName", details.toCompany);
            request.AddParameter("DeliveryAddr1", details.toAddress1);
            request.AddParameter("DeliveryPostcode", details.toPostcode);
            request.AddParameter("DeliveryTown", details.toCity);

            request.AddParameter("WeightInKg", details.weight);
            request.AddParameter("CountryCode", details.countryCode);

            if (details.toContactName != "")
            {
                request.AddParameter("DeliveryContactName", details.toContactName);
            }
            if (details.toContactPhone != "")
            {
                request.AddParameter("DeliveryContactPhone", details.toContactPhone);
            }
            if (details.toEmail != "")
            {
                request.AddParameter("DeliveryEmailAddress", details.toEmail);
            }

            //NOTE: will turn to true in live
            request.AddParameter("RequiresPickup", "False");
            request.AddParameter("TestMode", "false");
            //Service to be used, this is base on servicequery method
            request.AddParameter("LabelColour", details.labelColour);
            //execute API calls await for response
            IRestResponse response = client.Execute(request);
            //parsing response content to her labels numbers
            JObject o = JObject.Parse(response.Content);

            JArray test = JArray.Parse(o["result"]["usable_labels"].ToString());

            //forming return strings containings all labels number required on this call (NOTE: excluding excess label number at this stage)
            label = test[0]["base_label_number"].ToString();
            if (test[0]["rural_label_number"] != null)
            {
                label += ',' + test[0]["rural_label_number"].ToString();
            }

            return(label);
        }
예제 #7
0
        /// <summary>
        /// Method to query for availabel service providing all details
        /// </summary>
        /// <param name="details">Label Details struct object to hold all label details</param>
        /// <returns>a list of Usablelabels to be processed</returns>
        public List <UsableLabel> ServiceQuery(Labeldetails details)
        {
            //RestClient objet to ustilise RESTAPI call
            var client = new RestClient();

            //Fastway API url (NOTE: NZ only, need to be changed if using for other countries)
            client.BaseUrl = new Uri("http://nz.api.fastway.org/v2/");
            //Rest request object to populate required parameter for API call
            var request = new RestRequest();

            //populate all data required
            request.Resource = "dynamiclabels/allocate-with-consignor-consignee-details";

            request.AddParameter("api_key", details.apiKey);

            request.AddParameter("PickupName", details.fromCompany);
            request.AddParameter("PickupAddr1", details.fromAddress1);
            request.AddParameter("PickupPostcode", details.fromPostcode);
            request.AddParameter("PickupTown", details.fromCity);

            request.AddParameter("DeliveryAddr1", details.toAddress1);
            request.AddParameter("DeliveryPostcode", details.toPostcode);
            request.AddParameter("DeliveryTown", details.toCity);

            request.AddParameter("WeightInKg", details.weight);
            request.AddParameter("CountryCode", details.countryCode); // NEED TO CHECK this if using for other countries

            request.AddParameter("RequiresPickup", "False");          //will turn to true in live

            request.AddParameter("TestMode", "false");

            //Call API await for response
            IRestResponse response = client.Execute(request);
            //parse response content
            JObject o = JObject.Parse(response.Content);
            //List of Usablelabel objects to hold labels data
            List <UsableLabel> labels = new List <UsableLabel>();
            //usable label object to hold cheapest parcel option
            UsableLabel parcel = new UsableLabel();

            if (o["error"] != null)
            {//if API return an error
                //returning an empty usablelabel object with BaseLabelColour = Error message
                //NOTE: will turn this to error message if required
                UsableLabel s = new UsableLabel();
                s.BaseLabelColour = o["error"].ToString();
                labels.Add(s);
            }

            if (o["result"] != null)
            {//if API returns success
                //parsing the cheapest parcel then add this first to the list
                JObject     cheapParcel = JObject.Parse(o["result"]["cheapest_parcel"].ToString());
                UsableLabel l           = new UsableLabel();
                l.BaseLabelColour             = cheapParcel["base_label_colour"].ToString();
                l.ExcessLabelCount            = (int)cheapParcel["excess_label_count"];
                l.CostexgstAdditionalAdminFee = cheapParcel["costexgst_additional_admin_fee"].ToString();
                l.CostexgstProfitValue        = cheapParcel["costexgst_profit_value"].ToString();
                l.CostexgstLabel = cheapParcel["costexgst_label"].ToString();
                l.CostexgstTotalChargeToEndUser = (double)cheapParcel["costexgst_total_charge_to_end_user"];
                l.BaseLabelCostExgst            = cheapParcel["base_label_cost_exgst"].ToString();
                l.RuralLabelCostExgst           = (double)cheapParcel["rural_label_cost_exgst"];
                l.PscPriceExgst        = (double)cheapParcel["psc_price_exgst"];
                l.ExcessLabelCostExgst = cheapParcel["excess_label_cost_exgst"].ToString();
                l.Type       = cheapParcel["type"].ToString();
                l.SortOrder  = (int)cheapParcel["sort_order"];
                l.BaseWeight = (int)cheapParcel["base_weight"];
                l.MaxWeight  = (int)cheapParcel["max_weight"];
                l.Saturday   = o["result"]["isSaturdayDeliveryAvailable"].ToString();
                labels.Add(l);

                //parsing usable labels
                JArray test = JArray.Parse(o["result"]["usable_labels"].ToString());
                //add all Satchel options to the list
                for (var i = 0; i < test.Count; i++)
                {
                    if (test[i]["base_label_colour"].ToString().Contains("SAT-NAT-"))
                    {
                        UsableLabel s = new UsableLabel();
                        s.BaseLabelColour             = test[i]["base_label_colour"].ToString();
                        s.ExcessLabelCount            = (int)test[i]["excess_label_count"];
                        s.CostexgstAdditionalAdminFee = test[i]["costexgst_additional_admin_fee"].ToString();
                        s.CostexgstProfitValue        = test[i]["costexgst_profit_value"].ToString();
                        s.CostexgstLabel = test[i]["costexgst_label"].ToString();
                        s.CostexgstTotalChargeToEndUser = (double)test[i]["costexgst_total_charge_to_end_user"];
                        s.BaseLabelCostExgst            = test[i]["base_label_cost_exgst"].ToString();
                        s.RuralLabelCostExgst           = (double)test[i]["rural_label_cost_exgst"];
                        s.PscPriceExgst        = (double)test[i]["psc_price_exgst"];
                        s.ExcessLabelCostExgst = test[i]["excess_label_cost_exgst"].ToString();
                        s.Type       = test[i]["type"].ToString();
                        s.SortOrder  = (int)test[i]["sort_order"];
                        s.BaseWeight = (int)test[i]["base_weight"];
                        s.MaxWeight  = (int)test[i]["max_weight"];
                        s.Saturday   = o["result"]["isSaturdayDeliveryAvailable"].ToString();
                        labels.Add(s);
                    }
                }
            }
            //returning list of usable label for process
            return(labels);
        }
예제 #8
0
        public JsonResult LabelPrinting(string ShopUrl, string DeliveryDetails, string PackagingDetails)
        {
            //labeldetails object to call Fastway API
            Labeldetails label = new Labeldetails();
            //DB connection to query sender details
            DbEngine conn = new DbEngine();

            label.apiKey = conn.GetStringValues(ShopUrl, "FastwayApiKey");
            //assign sender details
            label.fromAddress1 = conn.GetStringValues(ShopUrl, "StoreAddress1");
            label.fromPostcode = conn.GetStringValues(ShopUrl, "Postcode");
            label.fromCity     = conn.GetStringValues(ShopUrl, "Suburb");
            label.fromCompany  = conn.GetStringValues(ShopUrl, "StoreName");
            label.countryCode  = conn.GetIntergerValues(ShopUrl, "CountryCode");
            //parse delivery details
            JObject d = JObject.Parse(DeliveryDetails);

            //assign receiver details
            label.toAddress1 = d["Address1"].ToString();
            label.toPostcode = d["Postcode"].ToString();
            label.toCity     = d["Suburb"].ToString();

            if (d["Company"].ToString() != "")
            {
                label.toCompany     = d["Company"].ToString();
                label.toContactName = d["ContactName"].ToString();
            }
            else
            {
                label.toCompany = d["ContactName"].ToString();
            }

            label.toContactPhone = d["ContactPhone"].ToString();
            label.toEmail        = d["ContactEmail"].ToString();

            //parse packaging details
            JArray p = JArray.Parse(PackagingDetails);
            //object to store labelNumbers
            List <string> labelNumbers = new List <string>();

            //TEST label with details
            //List<Labeldetails> labelDetails = new List<Labeldetails>();

            for (int i = 0; i < p.Count; i++)
            {     //loop through packaging details to query Fastway API and get label numbers //TEST details
                for (int j = 0; j < (int)p[i]["Items"]; j++)
                { //repeat this steps for number of item on each parcel type
                    //package details
                    label.weight      = (double)p[i]["Weight"];
                    label.labelColour = p[i]["BaseLabel"].ToString();
                    //new fastwayAPI object to query
                    FastwayAPI getLabel = new FastwayAPI();
                    //a string object to hold label numbers
                    string labelNumber = getLabel.LabelQuery(label);
                    //TEST details, a LabelDetails oblect to hold labelDetails
                    //Labeldetails details = getLabel.LabelsQueryWithDetails(label);


                    //NOTE: reference
                    //label.reference = p["Reference"].ToString();

                    if (labelNumber.Contains(','))
                    {//if rural label exist
                        List <string> labelNumbersList = labelNumber.Split(',').ToList();
                        foreach (string st in labelNumbersList)
                        {//add multiple labels to result
                            labelNumbers.Add(st);
                        }
                    }
                    else
                    {//only one label
                        labelNumbers.Add(labelNumber);
                    }
                    //TEST details
                    //labelDetails.Add(details);
                    //labelNumbers.Add(details.labelNumber);
                }
            }

            //new fastway api to printlabel
            FastwayAPI printLabel = new FastwayAPI();

            string pdfString = printLabel.PrintLabelNumbersPdf(labelNumbers, label.apiKey);

            //TEST details
            //string pdfString = printLabel.PrintLabelWithDetails(labelDetails, label.apiKey);


            try
            {
                return(Json(new
                {//returning results to front-end
                    Labels = String.Join(",", labelNumbers),
                    PdfBase64Stream = pdfString
                                      //Test print type image
                                      //JpegString = jpegString
                }));
            } catch (Exception e)
            {//NOTE: manage exception if required
                throw e;
            }
        }