/// <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; } }
/// <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); }
/// <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); }
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; } }