Example #1
0
        public IActionResult CsvImportProccess(CsvFormData data)
        {
            var langRequest = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            var culture     = langRequest.RequestCulture.Culture;
            var _lang       = culture.ToString();

            var attachedFile = Request.Form.Files["CsvFile"];

            if (attachedFile == null || attachedFile.Length <= 0)
            {
                return(Json(null));
            }
            var    csvReader       = new StreamReader(attachedFile.OpenReadStream(), Encoding.GetEncoding(932), false);
            var    uploadModelList = new List <UserCsvData>();
            string inputDataRead;
            var    values = new List <string>();

            while ((inputDataRead = csvReader.ReadLine()) != null)
            {
                values.Add(inputDataRead.Trim());
            }
            Boolean err = false;

            //get header
            var head      = values[0];
            var arrHead   = head.Split(',');
            int total_col = arrHead.Length;

            int[] col_val = new int[total_col];
            if (total_col > 8)
            {
                for (int i = 8; i < total_col; i++)
                {
                    string  machine_name = arrHead[i];
                    Machine m            = _db.Machines.Where(m => m.MachineNameJp == machine_name).FirstOrDefault();
                    if (m == null)
                    {
                        err = true;
                        WriteLog("Error at header - Machine: [" + machine_name + "] not exist.");
                        break;
                    }
                    else
                    {
                        col_val[i] = m.MachineId;
                    }
                }
            }
            //remove header
            values.Remove(values[0]);
            /*values.Remove(values[values.Count - 1]);*/
            if (!err)
            {
                List <string> cate_name_list = new List <string>();
                int           row            = 1;
                foreach (var value in values)
                {
                    var uploadModelRecord = new UserCsvData();
                    var eachValue         = value.Split(',');

                    if (eachValue[0] == "" || countJapaneseStringLength(eachValue[0]) > 100)
                    {
                        WriteLog("Error at rows: " + row + " - 所属名(GroupName): [" + eachValue[1] + "] too long.");
                        err = true;
                        break;
                    }
                    else
                    {
                        var group_name = eachValue[0];
                        var group      = _db.Groups.Include(c => c.Users).Where(c => c.GroupNameJp == group_name && c.Status != 0).FirstOrDefault();
                        if (group == null)
                        {
                            WriteLog("Error at rows: " + row + " - 所属名 (GroupName): [" + group_name + "] not exist.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.GroupName = group_name;
                            uploadModelRecord.GroupId   = group.GroupId;

                            if (eachValue[1] == "" || countJapaneseStringLength(eachValue[1]) > 64)
                            {
                                WriteLog("Error at rows: " + row + " - ユーザーID (UserId): [" + eachValue[1] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                uploadModelRecord.LoginAccount = eachValue[1];
                            }

                            if (eachValue[2] == "" || countJapaneseStringLength(eachValue[2]) > 64)
                            {
                                WriteLog("Error at rows: " + row + " - パスワード (LoginPassword): [" + eachValue[2] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                uploadModelRecord.LoginPassword = eachValue[2];
                            }

                            if (eachValue[3] == "" || countJapaneseStringLength(eachValue[3]) > 100)
                            {
                                WriteLog("Error at rows: " + row + " - ユーザー名(UserNameJp): [" + eachValue[3] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                uploadModelRecord.UserNameJp = eachValue[3];
                            }

                            if (eachValue[4] == "" || countJapaneseStringLength(eachValue[4]) > 100)
                            {
                                WriteLog("Error at rows: " + row + " - ユーザー名(UserNameEn): [" + eachValue[4] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                uploadModelRecord.UserNameEn = eachValue[4];
                            }

                            if (eachValue[5] == "" || countJapaneseStringLength(eachValue[5]) > 50)
                            {
                                WriteLog("Error at rows: " + row + " - ユーザー区分 (UserType): [" + eachValue[5] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                if (eachValue[5] == "管理者")
                                {
                                    uploadModelRecord.UserType = 1;
                                }
                                else
                                {
                                    uploadModelRecord.UserType = 0;
                                }
                            }

                            if (eachValue[6] == "" || countJapaneseStringLength(eachValue[6]) > 20 || countJapaneseStringLength(eachValue[6]) < 3)
                            {
                                WriteLog("Error at rows: " + row + " - Tel: [" + eachValue[6] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                if (checkTelFormat(eachValue[6]))
                                {
                                    uploadModelRecord.Tel = eachValue[6];
                                }
                                else
                                {
                                    WriteLog("Error at rows: " + row + " - Tel: [" + eachValue[6] + "] is not a Tel number.");
                                    err = true;
                                    break;
                                }
                            }

                            if (eachValue[7] == "" || countJapaneseStringLength(eachValue[7]) > 100)
                            {
                                WriteLog("Error at rows: " + row + " - Mail: [" + eachValue[7] + "] too long.");
                                err = true;
                                break;
                            }
                            else
                            {
                                uploadModelRecord.Mail = eachValue[7];
                            }

                            List <int> Lmachines = new List <int>();
                            if (total_col > 8)
                            {
                                for (int j = 8; j < total_col; j++)
                                {
                                    if (eachValue[j] == "1")
                                    {
                                        Lmachines.Add(col_val[j]);
                                    }
                                }
                            }
                            uploadModelRecord.MachineId = Lmachines;
                        }
                    }

                    uploadModelList.Add(uploadModelRecord);// newModel needs to be an object of type ContextTables.
                    row++;
                }
            }

            if (err)
            {
                var result = new
                {
                    status  = 400,
                    message = (_lang == "en-US") ? "The content of the file is not correct." : "ファイルの内容が正しくありません。"
                };
                return(Json(result));
            }
            else
            {
                foreach (var item in uploadModelList)
                {
                    var user = _db.Users.Include(u => u.CanUseMachines).Where(u => u.LoginAccount == item.LoginAccount).FirstOrDefault();
                    if (user == null)
                    {
                        var us = new User();
                        us.LoginAccount  = item.LoginAccount;
                        us.LoginPassword = item.LoginPassword;
                        us.GroupId       = item.GroupId;
                        us.UserNameEn    = item.UserNameEn;
                        us.UserNameJp    = item.UserNameJp;
                        us.UserType      = item.UserType;
                        us.Status        = 1;
                        us.Tel           = item.Tel;
                        us.Mail          = item.Mail;
                        _db.Users.Add(us);
                        _db.SaveChanges();
                        var newUser = _db.Users.Include(u => u.CanUseMachines).Where(u => u.UserId == us.UserId).FirstOrDefault();
                        if (item.MachineId != null)
                        {
                            foreach (int i in item.MachineId)
                            {
                                var canUseMachine = new CanUseMachine();
                                canUseMachine.MachineId = i;
                                canUseMachine.UserId    = us.UserId;
                                newUser.CanUseMachines.Add(canUseMachine);
                            }
                            _db.SaveChanges();
                        }
                    }
                    else
                    {
                        user.UserNameJp    = item.UserNameJp;
                        user.UserNameEn    = item.UserNameEn;
                        user.Tel           = item.Tel;
                        user.Mail          = item.Mail;
                        user.LoginAccount  = item.LoginAccount;
                        user.LoginPassword = item.LoginPassword;
                        user.UserType      = item.UserType;
                        user.Status        = 1;
                        user.GroupId       = item.GroupId;

                        _db.Users.Update(user);
                        user.CanUseMachines.Clear();
                        _db.SaveChanges();

                        if (item.MachineId != null)
                        {
                            foreach (int i in item.MachineId)
                            {
                                var canUseMachine = new CanUseMachine();
                                canUseMachine.MachineId = i;
                                canUseMachine.UserId    = user.UserId;
                                user.CanUseMachines.Add(canUseMachine);
                            }
                            _db.SaveChanges();
                        }
                    }
                }

                var result = new
                {
                    status  = 200,
                    message = "Import success",
                    data    = uploadModelList
                };
                return(Json(result));
            }
        }
Example #2
0
        /*
         * CSV import
         * **/
        public IActionResult CsvImportProccess(CsvFormData data)
        {
            var langRequest = Request.HttpContext.Features.Get <IRequestCultureFeature>();
            var culture     = langRequest.RequestCulture.Culture;
            var _lang       = culture.ToString();

            var attachedFile = Request.Form.Files["CsvFile"];

            if (attachedFile == null || attachedFile.Length <= 0)
            {
                return(Json(null));
            }
            var    csvReader       = new StreamReader(attachedFile.OpenReadStream(), Encoding.GetEncoding(932), false);
            var    uploadModelList = new List <CsvData>();
            string inputDataRead;
            var    values = new List <string>();

            while ((inputDataRead = csvReader.ReadLine()) != null)
            {
                values.Add(inputDataRead.Trim());
            }

            /*values.Remove(values[0]);
             * values.Remove(values[values.Count - 1]);*/
            Boolean       err            = false;
            List <string> cate_name_list = new List <string>();
            int           row            = 1;

            foreach (var value in values)
            {
                var uploadModelRecord = new CsvData();
                var eachValue         = value.Split(',');

                if (eachValue[0] == "" || countJapaneseStringLength(eachValue[0]) > 50)
                {
                    err = true;
                    break;
                }
                else
                {
                    var cate_name = eachValue[0];
                    var category  = _db.Categories.Include(c => c.Machines).Where(c => c.CategoryNameJp == cate_name && c.Status != 0).FirstOrDefault();
                    if (category == null)
                    {
                        WriteLog("Error at rows: " + row + " - 分類名(Category): [" + cate_name + "] not exist.");
                        err = true;
                        break;
                    }
                    else
                    {
                        uploadModelRecord.CategoryName = cate_name;
                        if (eachValue[1] == "" || countJapaneseStringLength(eachValue[1]) > 100)
                        {
                            WriteLog("Error at rows: " + row + " - 機器名(MachineNameJp): [" + eachValue[1] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.MachineNameJp = eachValue[1];
                        }

                        if (eachValue[2] == "" || countJapaneseStringLength(eachValue[2]) > 100)
                        {
                            WriteLog("Error at rows: " + row + " - 機器名(MachineNameEn): [" + eachValue[2] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.MachineNameEn = eachValue[2];
                        }

                        if (eachValue[3] == "" || countJapaneseStringLength(eachValue[3]) > 100)
                        {
                            WriteLog("Error at rows: " + row + " - メーカー名(MakerNameJp): [" + eachValue[3] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.MakerNameJp = eachValue[3];
                        }

                        if (eachValue[4] == "" || countJapaneseStringLength(eachValue[4]) > 50)
                        {
                            WriteLog("Error at rows: " + row + " - 型式(ModelJp): [" + eachValue[4] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.ModelJp = eachValue[4];
                        }

                        if (eachValue[5] == "" || countJapaneseStringLength(eachValue[5]) > 50)
                        {
                            WriteLog("Error at rows: " + row + " - 型式(ModelEn): [" + eachValue[5] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.ModelEn = eachValue[5];
                        }

                        if (eachValue[6] == "" || countJapaneseStringLength(eachValue[6]) > 100)
                        {
                            WriteLog("Error at rows: " + row + " - 設置場所(PlaceJp): [" + eachValue[6] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.PlaceJp = eachValue[6];
                        }

                        if (eachValue[7] == "" || countJapaneseStringLength(eachValue[7]) > 100)
                        {
                            WriteLog("Error at rows: " + row + " - 設置場所(PlaceEn): [" + eachValue[7] + "] too long.");
                            err = true;
                            break;
                        }
                        else
                        {
                            uploadModelRecord.PlaceEn = eachValue[7];
                        }

                        if (!err)
                        {
                            var machine_query = _db.Machines.Where(m => m.MachineNameEn == uploadModelRecord.MachineNameEn && m.MachineNameJp == uploadModelRecord.MachineNameJp && m.Status == 1 && m.CategoryId == category.CategoryId).FirstOrDefault();

                            if (machine_query != null)
                            {
                                machine_query.MachineNameJp = uploadModelRecord.MachineNameJp;
                                machine_query.MachineNameEn = uploadModelRecord.MachineNameEn;
                                machine_query.MakerNameJp   = uploadModelRecord.MakerNameJp;
                                machine_query.ModelJp       = uploadModelRecord.ModelJp;
                                machine_query.ModelEn       = uploadModelRecord.ModelEn;
                                machine_query.PlaceJp       = uploadModelRecord.PlaceJp;
                                machine_query.PlaceEn       = uploadModelRecord.PlaceEn;
                                machine_query.Status        = 1;
                                _db.Machines.Update(machine_query);
                                _db.SaveChanges();
                            }
                            else
                            {
                                Machine machine = new Machine();
                                machine.MachineNameJp = uploadModelRecord.MachineNameJp;
                                machine.MachineNameEn = uploadModelRecord.MachineNameEn;
                                machine.MakerNameJp   = uploadModelRecord.MakerNameJp;
                                machine.ModelJp       = uploadModelRecord.ModelJp;
                                machine.ModelEn       = uploadModelRecord.ModelEn;
                                machine.PlaceJp       = uploadModelRecord.PlaceJp;
                                machine.PlaceEn       = uploadModelRecord.PlaceEn;
                                machine.Status        = 1;
                                category.Machines.Add(machine);
                            }
                        }
                    }
                }

                uploadModelList.Add(uploadModelRecord);// newModel needs to be an object of type ContextTables.
                row++;
            }


            if (err)
            {
                var result = new
                {
                    status  = 400,
                    message = (_lang == "en-US") ? "The content of the file is not correct." : "ファイルの内容が正しくありません。"
                };
                return(Json(result));
            }
            else
            {
                _db.SaveChanges();
                var result = new
                {
                    status  = 200,
                    message = "Import success",
                    data    = uploadModelList
                };
                return(Json(result));
            }
        }