public ActionResult AddSave(MaintenanceRecord data) { //# validation if (string.IsNullOrEmpty(data.start_date)) { data.SaveResult.WarningMessage = "請填上開始日期"; data.SaveResult.SavedSuccessfully = false; return Json(data); } if (string.IsNullOrEmpty(data.end_date)) { data.SaveResult.WarningMessage = "請填上完結日期"; data.SaveResult.SavedSuccessfully = false; return Json(data); } if (DateTime.ParseExact(data.end_date, "dd-MM-yyyy", null) < DateTime.ParseExact(data.start_date, "dd-MM-yyyy", null)) { data.SaveResult.WarningMessage = "完結日期應在開始日期之後"; data.SaveResult.SavedSuccessfully = false; return Json(data); } if (!data.routine_id.HasValue) { data.SaveResult.WarningMessage = "請選擇Routine"; data.SaveResult.SavedSuccessfully = false; return Json(data); } if (!String.IsNullOrEmpty(data.chq_no)) { if (data.chq_no.Length > 50) { data.SaveResult.WarningMessage = "請修改Cheque No.至50字以內"; data.SaveResult.SavedSuccessfully = false; return Json(data); } } Member member; recsys_customers masterCustomer; recsys_relate_customers customerData; recsys_maintenance maintenance; //# validation if (data.MasterCustomerID < 0) throw new SystemException("Invalid Entity ID"); //# get old master customer record masterCustomer = this._db.recsys_customers.FirstOrDefault(theCustomer => theCustomer.id == data.MasterCustomerID); //# validation if (masterCustomer == null) throw new RecordNotFoundException(); member = new Member("users"); bool createNewDistrict = false; if (!string.IsNullOrEmpty(data.WorkingDistrictName)) { recsys_district workingDistrict = this._db.recsys_district.Where(x => x.name.Trim().ToUpper().Equals(data.WorkingDistrictName.Trim().ToUpper())).SingleOrDefault(); if (workingDistrict != null) { data.district2 = workingDistrict.id; data.group_id = workingDistrict.group_id; } else createNewDistrict = true; } if (createNewDistrict) { recsys_district addNewDistrict = new recsys_district() { code = data.WorkingDistrictName.Trim(), name = data.WorkingDistrictName.Trim(), group_id = this._db.recsys_group.Where(x => x.name.Equals("Unknown Group For System Migration")).SingleOrDefault().id, region = 4, status = 1, last_update = DateTime.Now, update_user_id = (int)member.infoBySession("id") }; this._db.recsys_district.AddObject(addNewDistrict); this._db.SaveChanges(); data.district2 = this._db.recsys_district.Where(x => x.name.Equals(data.WorkingDistrictName.Trim())).SingleOrDefault().id; data.group_id = this._db.recsys_district.Where(x => x.name.Equals(data.WorkingDistrictName.Trim())).SingleOrDefault().group_id; } createNewDistrict = false; if (!string.IsNullOrEmpty(data.MailingDistrictName)) { recsys_district mailingDistrict = this._db.recsys_district.Where(x => x.name.Trim().ToUpper().Equals(data.MailingDistrictName.Trim().ToUpper())).SingleOrDefault(); if (mailingDistrict != null) { data.district1 = mailingDistrict.id; data.group_id = mailingDistrict.group_id; } else createNewDistrict = true; } if (createNewDistrict) { recsys_district addNewDistrict = new recsys_district() { code = data.MailingDistrictName.Trim(), name = data.MailingDistrictName.Trim(), group_id = this._db.recsys_group.Where(x => x.name.Equals("Unknown Group For System Migration")).SingleOrDefault().id, region = 4, status = 1, last_update = DateTime.Now, update_user_id = (int)member.infoBySession("id") }; this._db.recsys_district.AddObject(addNewDistrict); this._db.SaveChanges(); data.district1 = this._db.recsys_district.Where(x => x.name.Equals(data.MailingDistrictName.Trim())).SingleOrDefault().id; data.group_id = this._db.recsys_district.Where(x => x.name.Equals(data.MailingDistrictName.Trim())).SingleOrDefault().group_id; } //# mapping customerData = new recsys_relate_customers() { address1 = data.address1, address2 = data.address2, center = masterCustomer.center, code = masterCustomer.code, contact = data.contact, customer_code = masterCustomer.customer_code, customer_id = masterCustomer.id, district1 = data.district1, district2 = data.district2, email = data.email, fax1 = data.fax1, fax2 = data.fax2, group_id = data.group_id, manual_input_code = masterCustomer.manual_input_code, name = data.name, chi_name = data.chi_name, prefix = masterCustomer.prefix, relate_type = (int) Rec_System.Models.Customers.CustomerDataRelateType.Maintenance, reference_number = masterCustomer.reference_number, remark = data.remark, tel1 = data.tel1, tel2 = data.tel2, title = (byte) data.title, type = (byte) masterCustomer.type }; this._db.recsys_relate_customers.AddObject(customerData); recsys_routine routine = null; if (data.routine_id != null) { routine = (from r in this._db.recsys_routine where r.id == data.routine_id select r).FirstOrDefault(); } maintenance = new recsys_maintenance() { amount = data.amount, chq_no = data.chq_no, chq_receive_date = DateChecking(data.chq_receive_date), billing_date = DateChecking(data.billing_date), checking_date = DateChecking(data.checking_date), confirm_date = DateChecking(data.confirm_date), create_date = DateTime.Now, end_date = DateChecking(data.end_date), invoice = data.invoice, invoice_date = DateChecking(data.invoice_date), issue_date = DateChecking(data.issue_date), last_update = DateTime.Now, model = data.model, routine = data.routine, routine2 = data.routine2, lang = data.lang, payment = data.payment, period = data.period, printed = (byte)(data.printed ? 1 : 0), remark = routine != null ? "[" + routine.description_chi + "]" + data.remark2 : data.remark2, schedule = data.schedule, start_date = DateChecking(data.start_date), status = (byte)data.status, update_user_id = (int)member.infoBySession("id"), master_routine_id = data.routine_id }; this._db.recsys_maintenance.AddObject(maintenance); try { this._db.SaveChanges(); this._db.Refresh(System.Data.Objects.RefreshMode.StoreWins, customerData); this._db.Refresh(System.Data.Objects.RefreshMode.StoreWins, maintenance); maintenance.customer_id = customerData.id; this._db.SaveChanges(); this._db.Refresh(System.Data.Objects.RefreshMode.StoreWins, maintenance); data.id = maintenance.id; data.center = customerData.center; bool generateOrderYet = data.auto_gen_order.HasValue ? data.auto_gen_order.Value : false; if (!generateOrderYet && !string.IsNullOrEmpty(data.confirm_date)) { IEnumerable<recsys_order> orders; //# logic: create orders (定期保養) if (this.TryGenerateOrdersForMaintenance(maintenance, this._db.recsys_routine.FirstOrDefault(theRoutine => theRoutine.id == maintenance.master_routine_id), out orders)) { maintenance.period = orders.Count(); maintenance.auto_gen_order = true; this._db.SaveChanges(); data.SaveResult.SavedSuccessfully = true; } } else { data.SaveResult.SavedSuccessfully = true; } } catch (OptimisticConcurrencyException) { //# log down } return Json(data); }
/// <summary> /// Deprecated Method for adding a new object to the recsys_maintenance EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead. /// </summary> public void AddTorecsys_maintenance(recsys_maintenance recsys_maintenance) { base.AddObject("recsys_maintenance", recsys_maintenance); }
private bool TryGenerateOrdersForMaintenance(recsys_maintenance maintenance, recsys_routine routine, out IEnumerable<recsys_order> generatedOrders) { recsys_relate_customers masterCustomerData; Member member; List<recsys_relate_customers> customerDatas; List<recsys_order> orders; DateTime? startCalculationDate = null; DateTime? endCalculationDate = null; HolidaysController holidayController; List<DateTime> holidays; IEnumerable<DateTime> orderRepairDates; bool isSuccessful = false; generatedOrders = new List<recsys_order>(); //# validation if (routine == null) return false; if (maintenance == null) return true; if (!routine.repair_date_frequency_in_month.HasValue) return true; if (!maintenance.start_date.HasValue && !maintenance.confirm_date.HasValue) return true; //# start date of the calculation is counting on either the start date or confirm date; if null is given, just return true to indicate no order is generated if (!maintenance.end_date.HasValue) return true; //# if maintenace does not have an end date, do not do anything //startCalculationDate = maintenance.confirm_date.HasValue ? maintenance.confirm_date.Value : maintenance.start_date; startCalculationDate = maintenance.start_date; endCalculationDate = maintenance.end_date; holidayController = new HolidaysController(); holidays = holidayController.GetHolidays(startCalculationDate.Value, endCalculationDate.Value, true); orderRepairDates = maintenance.GetOrderRepairDatesByRoutine(routine, holidays); //# get old master customer record var _masterCustomerData = from m in this._db.recsys_maintenance join cd in this._db.recsys_relate_customers on m.customer_id equals cd.id into cds from cd in cds.DefaultIfEmpty() where m.id == maintenance.id select new { cd }; masterCustomerData = _masterCustomerData.Select(theRecord => theRecord.cd).FirstOrDefault(); //# validation if (masterCustomerData == null) throw new RecordNotFoundException(); member = new Member("users"); customerDatas = new List<recsys_relate_customers>(); //# customer data for (int i = 0; i < orderRepairDates.Count(); i++) { //# mapping recsys_relate_customers customerData = new recsys_relate_customers() { address1 = masterCustomerData.address1, address2 = masterCustomerData.address2, center = masterCustomerData.center, code = masterCustomerData.code, contact = masterCustomerData.contact, customer_code = masterCustomerData.customer_code, customer_id = masterCustomerData.customer_id, district1 = masterCustomerData.district1, district2 = masterCustomerData.district2, email = masterCustomerData.email, fax1 = masterCustomerData.fax1, fax2 = masterCustomerData.fax2, group_id = masterCustomerData.group_id, manual_input_code = masterCustomerData.manual_input_code, name = masterCustomerData.name, chi_name = masterCustomerData.chi_name, prefix = masterCustomerData.prefix, relate_type = (int)Rec_System.Models.Customers.CustomerDataRelateType.Quotation, reference_number = masterCustomerData.reference_number, remark = masterCustomerData.remark, tel1 = masterCustomerData.tel1, tel2 = masterCustomerData.tel2, title = (byte)masterCustomerData.title, type = (byte)masterCustomerData.type }; customerDatas.Add(customerData); this._db.recsys_relate_customers.AddObject(customerData); } try { this._db.SaveChanges(); this._db.Refresh(System.Data.Objects.RefreshMode.StoreWins, customerDatas); orders = new List<recsys_order>(); for (int j = 0; j < customerDatas.Count; j++) { recsys_relate_customers theCustomerData = customerDatas[j]; recsys_order order = new recsys_order() { by_system = 1, create_date = DateTime.Now, model = maintenance.model, repair_date = orderRepairDates.ElementAt(j), customer_id = theCustomerData.id, fault = "[" + OrderStatus.AppointedWarranty.Name + "]", //# logic last_update = DateTime.Now, status = (byte) RecordStatus.Active, update_user_id = (int)member.infoBySession("id"), start_time = null, end_time = null, order_status = OrderStatus.AppointedWarranty.ID, call_pickup_user_id = (int) member.infoBySession("id") }; orders.Add(order); this._db.recsys_order.AddObject(order); } this._db.SaveChanges(); this._db.Refresh(System.Data.Objects.RefreshMode.StoreWins, orders); foreach (recsys_order theOrder in orders) { recsys_relate relation = new recsys_relate() { id1 = maintenance.id, id2 = theOrder.id, table1 = "maintenance", table2 = "order" }; this._db.recsys_relate.AddObject(relation); } this._db.SaveChanges(); generatedOrders = orders; isSuccessful = true; } catch(OptimisticConcurrencyException) { //# log down } return isSuccessful; }
/// <summary> /// Create a new recsys_maintenance object. /// </summary> /// <param name="id">Initial value of the id property.</param> /// <param name="customer_id">Initial value of the customer_id property.</param> /// <param name="create_date">Initial value of the create_date property.</param> /// <param name="printed">Initial value of the printed property.</param> /// <param name="status">Initial value of the status property.</param> public static recsys_maintenance Createrecsys_maintenance(global::System.Int32 id, global::System.Int32 customer_id, global::System.DateTime create_date, global::System.Byte printed, global::System.Byte status) { recsys_maintenance recsys_maintenance = new recsys_maintenance(); recsys_maintenance.id = id; recsys_maintenance.customer_id = customer_id; recsys_maintenance.create_date = create_date; recsys_maintenance.printed = printed; recsys_maintenance.status = status; return recsys_maintenance; }