// POST: api/JobCard public string Post(HttpRequestMessage value) { try { string message = HttpContext.Current.Server.UrlDecode(value.Content.ReadAsStringAsync().Result).Substring(5); JObject json = JObject.Parse(message); JArray partDetails = (JArray)json["details"]; Job_Card jc = new Job_Card(); int job_key = db.Job_Card.Count() == 0 ? 1 : (from t in db.Job_Card orderby t.Job_Card_ID descending select t.Job_Card_ID).First() + 1; jc.Job_Card_ID = job_key; jc.Job_Card_Date = (DateTime)json["Job_Card_Date"]; jc.Job_Card_Status_ID = (int)json["Job_Card_Status_ID"]; jc.Job_Card_Priority_ID = 2; db.Job_Card.Add(jc); db.SaveChanges(); int detail_key = db.Job_Card_Detail.Count() == 0 ? 1 : (from t in db.Job_Card_Detail orderby t.Job_Card_Details_ID descending select t.Job_Card_Details_ID).First() + 1; foreach (JObject part in partDetails) { Job_Card_Detail jcd = new Job_Card_Detail(); jcd.Job_Card_Details_ID = detail_key; detail_key++; jcd.Part_Type_ID = (int)part["Part_Type_ID"]; jcd.Job_Card_ID = job_key; jcd.Non_Manual = Convert.ToBoolean((string)part["Non_Manual"]); jcd.Quantity = (int)part["Quantity"]; db.Job_Card_Detail.Add(jcd); db.SaveChanges(); //2. Handle child dependencies checkForChildren(jcd.Part_Type_ID, jcd.Quantity, job_key, "Manufacturing"); generateUniqueParts(jcd.Quantity, jcd.Part_Type_ID, 0, detail_key - 1, "Manufacturing"); } return("true|Job Card #" + job_key + " successfully added."); } catch (Exception e) { ExceptionLog.LogException(e, "JobCardController POST"); return("false|An error has occured adding the Job Card to the system."); } }
private void assignAvailableParts(int part_ID, int job_card_detail_ID) { Job_Card_Detail jcd = new Job_Card_Detail(); jcd = (from p in db.Job_Card_Detail where p.Job_Card_Details_ID == job_card_detail_ID select p).First(); Part part = new Part(); part = (from p in db.Parts where p.Part_ID == part_ID select p).First(); jcd.Parts.Add(part); db.SaveChanges(); }
private void checkForChildren(int part_type_ID, int quantity_requested, int job_card_ID, string type) { //(Armand) Check for dependencies i.e check if the part_type has any part dependencies in the recipe table //and make a list of children part_types. List <Recipe> dependencies = null; dependencies = (from p in db.Recipes where p.Part_Type_ID == part_type_ID && p.Recipe_Type == "Part Type" select p).ToList(); if (dependencies != null) { foreach (Recipe pt in dependencies) { int?child_ID = pt.Item_ID; //(Armand) first check if there isn't alreayd an entry for the child's ID in job_card_detail //where jcd.Part_Type_ID == child_ID and Job_Card_ID == job_card_ID and assign to jcd Job_Card_Detail jcd = null; jcd = (from p in db.Job_Card_Detail where p.Part_Type_ID == child_ID && p.Job_Card_ID == job_card_ID select p).FirstOrDefault(); int quantity = quantity_requested * pt.Quantity_Required; if (jcd != null) { //add the required children parts to the quantity already requested int new_quantity; if (quantity > jcd.Quantity) { new_quantity = jcd.Quantity + quantity; } else { new_quantity = jcd.Quantity; } //update this existing record with the new quantity. jcd.Quantity = new_quantity; db.SaveChanges(); } else { int detail_key = db.Job_Card_Detail.Count() == 0 ? 1 : (from t in db.Job_Card_Detail orderby t.Job_Card_Details_ID descending select t.Job_Card_Details_ID).First() + 1; Job_Card_Detail jcd2 = new Job_Card_Detail(); jcd2.Job_Card_Details_ID = detail_key; jcd2.Part_Type_ID = Convert.ToInt32(pt.Part_Type_ID); jcd2.Job_Card_ID = job_card_ID; jcd2.Non_Manual = true; jcd2.Quantity = quantity; db.Job_Card_Detail.Add(jcd2); db.SaveChanges(); //The id of the last inserted record i.e. the one above int available = checkForPartAvailability(Convert.ToInt32(child_ID), quantity, detail_key); //Calculate how many new parts must be generated int how_many = quantity - available; //Generate the new child parts generateUniqueParts(how_many, Convert.ToInt32(child_ID), 1, detail_key, type); } } } }
// POST: api/CustomerOrder public string Post(HttpRequestMessage value) { // try // { Model.Client_Order co = new Model.Client_Order(); string message = HttpContext.Current.Server.UrlDecode(value.Content.ReadAsStringAsync().Result).Substring(5); JObject json = JObject.Parse(message); JObject orderDetails = (JObject)json["client"]; JArray parts = (JArray)orderDetails["details"]; string todo = (string)json["action"]; int key = db.Client_Order.Count() == 0 ? 1 : (from t in db.Client_Order orderby t.Client_Order_ID descending select t.Client_Order_ID).First() + 1; co.Client_Order_ID = key; co.Date = (DateTime)orderDetails["Date"]; co.Reference_ID = (string)orderDetails["Reference_ID"]; co.Contact_ID = (int)orderDetails["Contact_ID"]; co.Client_ID = (int)orderDetails["Client_ID"]; co.Settlement_Discount_Rate = (double)orderDetails["Settlement_Discount_Rate"]; co.Client_Order_Type_ID = (int)orderDetails["Client_Order_Type_ID"]; co.Client_Order_Status_ID = 1; co.Settlement_Discount_Rate = (double)orderDetails["Settlement_Discount_Rate"]; co.Delivery_Method_ID = (int)orderDetails["Delivery_Method_ID"]; co.VAT_Inclu = Convert.ToBoolean((string)orderDetails["VAT_Inclu"]); co.Comment = (string)orderDetails["Comment"]; string errorString = "false|"; bool error = false; if ((from t in db.Client_Order where t.Reference_ID == co.Reference_ID select t).Count() != 0) { error = true; errorString += "The Customer Order Reference entered already exists on the system. "; } if (error) { return(errorString); } Job_Card jc = new Job_Card(); int job_key = db.Job_Card.Count() == 0 ? 1 : (from t in db.Job_Card orderby t.Job_Card_ID descending select t.Job_Card_ID).First() + 1; jc.Job_Card_ID = job_key; jc.Job_Card_Date = (DateTime)orderDetails["Date"]; jc.Job_Card_Status_ID = 1; jc.Job_Card_Priority_ID = 1; co.Job_Card_ID = job_key; db.Client_Order.Add(co); db.Job_Card.Add(jc); db.SaveChanges(); int detail_key = db.Job_Card_Detail.Count() == 0 ? 1 : (from t in db.Job_Card_Detail orderby t.Job_Card_Details_ID descending select t.Job_Card_Details_ID).First() + 1; int co_key = db.Client_Order_Detail.Count() == 0 ? 1 : (from t in db.Client_Order_Detail orderby t.Client_Order_Detail_ID descending select t.Client_Order_Detail_ID).First() + 1; foreach (JObject part in parts) { Client_Order_Detail cqd = new Client_Order_Detail(); cqd.Part_Type_ID = (int)part["Part_Type_ID"]; cqd.Quantity = (int)part["Quantity"]; cqd.Quantity_Delivered = 0; cqd.Part_Price = (decimal)part["Part_Price"]; cqd.Client_Discount_Rate = (double)part["Client_Discount_Rate"]; cqd.Client_Order_ID = key; cqd.Client_Order_Detail_ID = co_key; co_key++; db.Client_Order_Detail.Add(cqd); Job_Card_Detail jcd = new Job_Card_Detail(); jcd.Job_Card_Details_ID = detail_key; detail_key++; jcd.Part_Type_ID = (int)part["Part_Type_ID"]; jcd.Job_Card_ID = job_key; jcd.Non_Manual = false; jcd.Quantity = (int)part["Quantity"]; db.Job_Card_Detail.Add(jcd); db.SaveChanges(); //2. Handle child dependencies checkForChildren(jcd.Part_Type_ID, jcd.Quantity, job_key, "Ordering"); generateUniqueParts(jcd.Quantity, jcd.Part_Type_ID, 0, detail_key - 1, "Ordering"); } db.SaveChanges(); if (todo == "email") { Client_Contact_Person_Detail cl = new Client_Contact_Person_Detail(); cl = (from p in db.Client_Contact_Person_Detail where p.Contact_ID == co.Contact_ID select p).First(); string to = cl.Email_Address; string subject = "WME Order #" + key; String orderDate = co.Date.ToShortDateString(); string body = "Walter Meano Engineering Order #" + key + "\nThe order was placed on " + orderDate + "\n\nItems on Order:\n"; foreach (JObject part in parts) { Part_Type pt = new Part_Type(); int part_id = (int)part["Part_Type_ID"]; pt = (from p in db.Part_Type where p.Part_Type_ID == part_id select p).First(); body += pt.Abbreviation + " - " + pt.Name + "\t\tx" + (int)part["Quantity"] + "\tR " + (decimal)part["Part_Price"] + " per unit\n"; } Email.SendEmail(to, subject, body); } return("true|Order #" + key + " has been placed."); /* var return_message = sendSms((int)orderDetails["Contact_ID"], key); * * return return_message; * } * catch(Exception e) * { * ExceptionLog.LogException(e, "CustomerOrderController POST"); * return "false|An error has occured adding the Customer Order to the system."; * }*/ }