public async Task <IActionResult> Post([FromBody] ProjectCodeMaster nProjectCodeMaster)
        {
            if (nProjectCodeMaster != null)
            {
                // add hour to DateTime to set Asia/Bangkok
                nProjectCodeMaster = helpers.AddHourMethod(nProjectCodeMaster);

                nProjectCodeMaster.CreateDate = DateTime.Now;
                nProjectCodeMaster.Creator    = nProjectCodeMaster.Creator ?? "Someone";

                if (nProjectCodeMaster.ProjectCodeDetails != null)
                {
                    foreach (var nDetail in nProjectCodeMaster.ProjectCodeDetails)
                    {
                        nDetail.CreateDate = nProjectCodeMaster.CreateDate;
                        nDetail.Creator    = nProjectCodeMaster.Creator;
                    }
                }

                return(new JsonResult(await this.repository.AddAsync(nProjectCodeMaster), this.DefaultJsonSettings));
            }

            return(NotFound(new { Error = "ProjectMaster not found. " }));
        }
Пример #2
0
        public async Task <IActionResult> CuttingPlanImportData(
            [FromBody] IEnumerable <CuttingImportViewModel> ImportDatas,
            string UserName = "")
        {
            string Message = "";

            try
            {
                if (ImportDatas != null)
                {
                    var date = DateTime.Now;

                    foreach (var Jobs in ImportDatas.GroupBy(x => x.JobNo.Trim()))
                    {
                        var PMaster = await this.repositoryProMaster.GetAllAsQueryable()
                                      .Where(x => x.ProjectCode.Trim().ToLower()
                                             .Equals(Jobs.Key.Trim().ToLower()))
                                      .Include(x => x.ProjectCodeDetails)
                                      .ThenInclude(z => z.CuttingPlans)
                                      .FirstOrDefaultAsync();

                        if (PMaster != null)
                        {
                            foreach (var JDetails in Jobs.GroupBy(x => x.Level23.Trim()))
                            {
                                var PDetail = PMaster.ProjectCodeDetails
                                              .FirstOrDefault(x => x.ProjectCodeDetailCode.Trim()
                                                              .ToLower().Equals(JDetails.Key.Trim().ToLower()));

                                if (PDetail != null)
                                {
                                    foreach (var Import in JDetails.GroupBy(x => x.CuttingPlan.Trim() + x.MaterialSize.Trim()))
                                    {
                                        var Cutting = PDetail.CuttingPlans
                                                      .FirstOrDefault(x =>
                                                                      ((x.CuttingPlanNo != null ? x.CuttingPlanNo.ToLower() : "") +
                                                                       (x.MaterialSize != null ? x.MaterialSize.ToLower() : ""))
                                                                      .Equals(Import.Key.ToLower()));

                                        if (Cutting == null)
                                        {
                                            foreach (var import2 in Import)
                                            {
                                                double.TryParse(import2.Quantity, out double qty);
                                                // Insert CuttingPlan and Material
                                                var nCuttingPlan = new CuttingPlan()
                                                {
                                                    ProjectCodeDetailId = PDetail.ProjectCodeDetailId,
                                                    CreateDate          = date,
                                                    Creator             = UserName,
                                                    CuttingPlanNo       = import2.CuttingPlan,
                                                    Description         = "Did not has description yet",
                                                    Quantity            = qty,
                                                    TypeCuttingPlan     = TypeCuttingPlan.CuttingPlan,
                                                    MaterialSize        = string.IsNullOrEmpty(import2.MaterialSize) ? "" : import2.MaterialSize.Trim(),
                                                    MaterialGrade       = string.IsNullOrEmpty(import2.MaterialGrade) ? "" : import2.MaterialGrade.Trim(),
                                                };

                                                await this.repository.AddAsync(nCuttingPlan);
                                            }
                                        }
                                    }
                                }
                                // if don't have add all data in this level2/3
                                else
                                {
                                    // Insert ProjectDetail
                                    var nProDetail = new ProjectCodeDetail()
                                    {
                                        CreateDate            = date,
                                        Creator               = UserName,
                                        Description           = "Did not has description yet.",
                                        ProjectCodeDetailCode = JDetails.Key,
                                        ProjectCodeMasterId   = PMaster.ProjectCodeMasterId,
                                        CuttingPlans          = new List <CuttingPlan>()
                                    };

                                    foreach (var Import in JDetails)
                                    {
                                        // Insert CuttingPlan and Material
                                        double.TryParse(Import.Quantity, out double qty);

                                        var nCuttingPlan = new CuttingPlan()
                                        {
                                            CreateDate      = date,
                                            Creator         = UserName,
                                            CuttingPlanNo   = Import.CuttingPlan,
                                            Description     = "Did not has description yet",
                                            Quantity        = qty,
                                            TypeCuttingPlan = TypeCuttingPlan.CuttingPlan,
                                            MaterialSize    = string.IsNullOrEmpty(Import.MaterialSize) ? "" : Import.MaterialSize.Trim(),
                                            MaterialGrade   = string.IsNullOrEmpty(Import.MaterialGrade) ? "" : Import.MaterialGrade.Trim(),
                                        };
                                        nProDetail.CuttingPlans.Add(nCuttingPlan);
                                    }

                                    // Insert ProjectDetail to DataBase
                                    await this.repositoryProDetail.AddAsync(nProDetail);
                                }
                            }
                        }
                        // if don't have add all data in this job
                        else
                        {
                            // Insert ProjectMaster
                            var nProMaster = new ProjectCodeMaster()
                            {
                                CreateDate         = date,
                                Creator            = UserName,
                                ProjectCode        = Jobs.Key,
                                ProjectName        = "Did not has name yet.",
                                StartDate          = date,
                                ProjectCodeDetails = new List <ProjectCodeDetail>()
                            };
                            // Insert all ProjectDetail ,CuttingPlan and Material
                            foreach (var JDetails in Jobs.GroupBy(x => x.Level23))
                            {
                                // Insert ProjectDetail
                                var nProDetail = new ProjectCodeDetail()
                                {
                                    CreateDate            = date,
                                    Creator               = UserName,
                                    Description           = "Did not has description yet.",
                                    ProjectCodeDetailCode = JDetails.Key,
                                    CuttingPlans          = new List <CuttingPlan>()
                                };
                                foreach (var Import in JDetails)
                                {
                                    // Insert CuttingPlan and Material
                                    double.TryParse(Import.Quantity, out double qty);
                                    var nCuttingPlan = new CuttingPlan()
                                    {
                                        CreateDate      = date,
                                        Creator         = UserName,
                                        CuttingPlanNo   = Import.CuttingPlan,
                                        Description     = "Did not has description yet",
                                        Quantity        = qty,
                                        TypeCuttingPlan = TypeCuttingPlan.CuttingPlan,
                                        MaterialSize    = string.IsNullOrEmpty(Import.MaterialSize) ? "" : Import.MaterialSize.Trim(),
                                        MaterialGrade   = string.IsNullOrEmpty(Import.MaterialGrade) ? "" : Import.MaterialGrade.Trim(),
                                    };
                                    nProDetail.CuttingPlans.Add(nCuttingPlan);
                                }

                                nProMaster.ProjectCodeDetails.Add(nProDetail);
                            }
                            // Insert ProjectMaster to DataBase
                            await this.repositoryProMaster.AddAsync(nProMaster);
                        }
                    }

                    // alway return true
                    return(new JsonResult(true, this.DefaultJsonSettings));
                }
            }
            catch (Exception ex)
            {
                Message = $"Has error {ex.ToString()}";
            }

            return(NotFound(new { Message }));
        }
        public async Task <IActionResult> PutByNumber(int key, [FromBody] ProjectCodeMaster uProjectCodeMaster)
        {
            if (uProjectCodeMaster != null)
            {
                // add hour to DateTime to set Asia/Bangkok
                uProjectCodeMaster = helpers.AddHourMethod(uProjectCodeMaster);
                // set modified
                uProjectCodeMaster.ModifyDate = DateTime.Now;
                uProjectCodeMaster.Modifyer   = uProjectCodeMaster.Modifyer ?? "Someone";

                if (uProjectCodeMaster.ProjectCodeDetails != null)
                {
                    foreach (var detail in uProjectCodeMaster.ProjectCodeDetails)
                    {
                        if (detail.ProjectCodeDetailId > 0)
                        {
                            detail.ModifyDate = uProjectCodeMaster.ModifyDate;
                            detail.Modifyer   = uProjectCodeMaster.Modifyer;
                        }
                        else
                        {
                            detail.CreateDate = uProjectCodeMaster.ModifyDate;
                            detail.Creator    = uProjectCodeMaster.Modifyer;
                        }
                    }
                }
                // update Master not update Detail it need to update Detail directly
                var updateComplate = await this.repository.UpdateAsync(uProjectCodeMaster, key);

                if (updateComplate != null)
                {
                    // filter
                    Expression <Func <ProjectCodeDetail, bool> > condition = m => m.ProjectCodeMasterId == key;
                    var dbDetails = this.repositoryDetail.FindAll(condition);

                    //Remove ProjectCodeDetails if edit remove it
                    foreach (var dbDetail in dbDetails)
                    {
                        var Message = "";
                        try
                        {
                            if (!uProjectCodeMaster.ProjectCodeDetails.Any(x => x.ProjectCodeDetailId == dbDetail.ProjectCodeDetailId))
                            {
                                await this.repositoryDetail.DeleteAsync(dbDetail.ProjectCodeDetailId);
                            }
                        }
                        catch (Exception ex)
                        {
                            Message = ex.ToString();
                        }
                    }
                    //Update ProjectCodeDetails
                    foreach (var uDetail in uProjectCodeMaster.ProjectCodeDetails)
                    {
                        if (uDetail.ProjectCodeDetailId > 0)
                        {
                            await this.repositoryDetail.UpdateAsync(uDetail, uDetail.ProjectCodeDetailId);
                        }
                        else
                        {
                            if (uDetail.ProjectCodeMasterId < 1)
                            {
                                uDetail.ProjectCodeMasterId = uProjectCodeMaster.ProjectCodeMasterId;
                            }

                            await this.repositoryDetail.AddAsync(uDetail);
                        }
                    }
                }
                return(new JsonResult(updateComplate, this.DefaultJsonSettings));
            }

            return(NotFound(new { Error = "ProjectMaster not found. " }));
        }