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);
        }
Beispiel #2
0
 /// <summary>
 /// Deprecated Method for adding a new object to the recsys_maintenance EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; 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;
        }
Beispiel #4
0
 /// <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;
 }