public async Task <int> Create(FabricQualityControlViewModel viewModel)
        {
            int result = 0;

            do
            {
                viewModel.Code = CodeGenerator.GenerateCode();
            } while (_repository.GetDbSet().Any(entity => entity.Code == viewModel.Code));

            var model = new FabricQualityControlModel(viewModel.Code, viewModel.DateIm.GetValueOrDefault(), viewModel.Group, viewModel.IsUsed.GetValueOrDefault(), viewModel.InspectionMaterialId,
                                                      viewModel.InspectionMaterialBonNo, viewModel.InspectionMaterialProductionOrderId, viewModel.ProductionOrderNo,
                                                      viewModel.MachineNoIm, viewModel.OperatorIm, viewModel.PointLimit.GetValueOrDefault(), viewModel.PointSystem.GetValueOrDefault(),
                                                      viewModel.FabricGradeTests.Select((s, i) =>
                                                                                        new FabricGradeTestModel(s.AvalALength.GetValueOrDefault(), s.AvalBLength.GetValueOrDefault(), s.AvalConnectionLength.GetValueOrDefault(), s.FabricGradeTest.GetValueOrDefault(), s.FinalArea.GetValueOrDefault(),
                                                                                                                 s.FinalGradeTest.GetValueOrDefault(), s.FinalLength.GetValueOrDefault(), s.FinalScore.GetValueOrDefault(), s.Grade, s.InitLength.GetValueOrDefault(),
                                                                                                                 s.PcsNo, s.PointLimit.GetValueOrDefault(), s.PointSystem.GetValueOrDefault(), s.SampleLength.GetValueOrDefault(), s.Score.GetValueOrDefault(),
                                                                                                                 s.Type, s.Width.GetValueOrDefault(), i,
                                                                                                                 s.Criteria.Select((d, cInd) => new CriteriaModel(d.Code, d.Group, cInd, d.Name, d.Score.A.GetValueOrDefault(), d.Score.B.GetValueOrDefault(),
                                                                                                                                                                  d.Score.C.GetValueOrDefault(), d.Score.D.GetValueOrDefault())).ToList())).ToList());

            result = await _repository.InsertAsync(model);

            var newBalance            = model.FabricGradeTests.Sum(s => s.InitLength);
            var avalABalance          = model.FabricGradeTests.Sum(s => s.AvalALength);
            var avalBBalance          = model.FabricGradeTests.Sum(s => s.AvalBLength);
            var avalConnectionBalance = model.FabricGradeTests.Sum(s => s.AvalConnectionLength);

            result += await _dpSPPRepository
                      .UpdateFromFabricQualityControlAsync(model.DyeingPrintingAreaInputProductionOrderId, model.FabricGradeTests.FirstOrDefault().Grade, true, newBalance, avalABalance, avalBBalance, avalConnectionBalance);

            return(result);
        }
 public async Task <int> CreateAsync(FabricQualityControlModel model)
 {
     do
     {
         model.Code = CodeGenerator.Generate();
     }while (DbSet.Any(d => d.Code.Equals(model.Code)));
     FabricQualityControlLogic.CreateModel(model);
     return(await DbContext.SaveChangesAsync());
 }
 public Task <int> InsertAsync(FabricQualityControlModel model)
 {
     model.FlagForCreate(_identityProvider.Username, UserAgent);
     foreach (var fabricGradeTest in model.FabricGradeTests)
     {
         fabricGradeTest.FlagForCreate(_identityProvider.Username, UserAgent);
     }
     _fabricQCDbSet.Add(model);
     return(_dbContext.SaveChangesAsync());
 }
        public Task <int> UpdateAsync(int id, FabricQualityControlModel model)
        {
            var modelToUpdate = _fabricQCDbSet.Include(s => s.FabricGradeTests).ThenInclude(s => s.Criteria).FirstOrDefault(entity => entity.Id == id);

            modelToUpdate.SetDateIm(model.DateIm, _identityProvider.Username, UserAgent);
            modelToUpdate.SetDyeingPrintingAreaInput(model.DyeingPrintingAreaInputId, model.DyeingPrintingAreaInputBonNo, model.DyeingPrintingAreaInputProductionOrderId,
                                                     model.ProductionOrderNo, _identityProvider.Username, UserAgent);
            modelToUpdate.SetGroup(model.Group, _identityProvider.Username, UserAgent);
            modelToUpdate.SetIsUsed(model.IsUsed, _identityProvider.Username, UserAgent);
            modelToUpdate.SetMachineNoIm(model.MachineNoIm, _identityProvider.Username, UserAgent);
            modelToUpdate.SetOperatorIm(model.OperatorIm, _identityProvider.Username, UserAgent);
            modelToUpdate.SetPointLimit(model.PointLimit, _identityProvider.Username, UserAgent);
            modelToUpdate.SetPointSystem(model.PointSystem, _identityProvider.Username, UserAgent);

            foreach (var item in modelToUpdate.FabricGradeTests)
            {
                var localModel = model.FabricGradeTests.FirstOrDefault(s => s.Id == item.Id);
                if (localModel == null)
                {
                    item.FlagForDelete(_identityProvider.Username, UserAgent);
                }
                else
                {
                    item.SetAvalALength(localModel.AvalALength, _identityProvider.Username, UserAgent);
                    item.SetAvalBLength(localModel.AvalBLength, _identityProvider.Username, UserAgent);
                    item.SetAvalConnectionLength(localModel.AvalConnectionLength, _identityProvider.Username, UserAgent);
                    item.SetFabricGradeTest(localModel.FabricGradeTest, _identityProvider.Username, UserAgent);
                    item.SetFinalArea(localModel.FinalArea, _identityProvider.Username, UserAgent);
                    item.SetFinalGradeTest(localModel.FinalGradeTest, _identityProvider.Username, UserAgent);
                    item.SetFinalLength(localModel.FinalLength, _identityProvider.Username, UserAgent);
                    item.SetFinalScore(localModel.FinalScore, _identityProvider.Username, UserAgent);
                    item.SetGrade(localModel.Grade, _identityProvider.Username, UserAgent);
                    item.SetInitLength(localModel.InitLength, _identityProvider.Username, UserAgent);
                    item.SetItemIndex(localModel.ItemIndex, _identityProvider.Username, UserAgent);
                    item.SetPcsNo(localModel.PcsNo, _identityProvider.Username, UserAgent);
                    item.SetPointLimit(localModel.PointLimit, _identityProvider.Username, UserAgent);
                    item.SetPointSystem(localModel.PointSystem, _identityProvider.Username, UserAgent);
                    item.SetSampleLength(localModel.SampleLength, _identityProvider.Username, UserAgent);
                    item.SetScore(localModel.Score, _identityProvider.Username, UserAgent);
                    item.SetType(localModel.Type, _identityProvider.Username, UserAgent);
                    item.SetWidth(localModel.Width, _identityProvider.Username, UserAgent);

                    foreach (var criteria in item.Criteria)
                    {
                        var localCriteria = localModel.Criteria.FirstOrDefault(s => s.Id == criteria.Id);

                        if (localCriteria != null)
                        {
                            criteria.SetCode(localCriteria.Code);
                            criteria.SetGroup(localCriteria.Group);
                            criteria.SetIndex(localCriteria.Index);
                            criteria.SetName(localCriteria.Name);
                            criteria.SetScoreA(localCriteria.ScoreA);
                            criteria.SetScoreB(localCriteria.ScoreB);
                            criteria.SetScoreC(localCriteria.ScoreC);
                            criteria.SetScoreD(localCriteria.ScoreD);
                        }
                        else
                        {
                            _criteriaDbSet.Remove(criteria);
                        }
                    }

                    foreach (var newCriteria in localModel.Criteria.Where(s => s.Id == 0))
                    {
                        item.Criteria.Add(newCriteria);
                    }
                }
            }

            foreach (var item in model.FabricGradeTests.Where(s => s.Id == 0))
            {
                item.FlagForCreate(_identityProvider.Username, UserAgent);
                modelToUpdate.FabricGradeTests.Add(item);
            }

            return(_dbContext.SaveChangesAsync());
        }
        private FabricQualityControlViewModel MapToViewModel(FabricQualityControlModel model, DyeingPrintingAreaInputProductionOrderModel dpModel)
        {
            FabricQualityControlViewModel vm = new FabricQualityControlViewModel()
            {
                InspectionMaterialId = model.DyeingPrintingAreaInputId,
                Active                              = model.Active,
                Buyer                               = dpModel?.Buyer,
                CartNo                              = dpModel?.CartNo,
                Code                                = model.Code,
                Color                               = dpModel?.Color,
                Construction                        = dpModel?.Construction,
                CreatedAgent                        = model.CreatedAgent,
                CreatedBy                           = model.CreatedBy,
                CreatedUtc                          = model.CreatedUtc,
                DateIm                              = model.DateIm,
                DeletedAgent                        = model.DeletedAgent,
                DeletedBy                           = model.DeletedBy,
                DeletedUtc                          = model.DeletedUtc,
                InspectionMaterialBonNo             = model.DyeingPrintingAreaInputBonNo,
                InspectionMaterialProductionOrderId = model.DyeingPrintingAreaInputProductionOrderId,
                Group                               = model.Group,
                Id                  = model.Id,
                IsDeleted           = model.IsDeleted,
                IsUsed              = model.IsUsed,
                LastModifiedAgent   = model.LastModifiedAgent,
                LastModifiedBy      = model.LastModifiedBy,
                LastModifiedUtc     = model.LastModifiedUtc,
                MachineNoIm         = model.MachineNoIm,
                OperatorIm          = model.OperatorIm,
                OrderQuantity       = dpModel?.Balance,
                PackingInstruction  = dpModel?.PackingInstruction,
                PointLimit          = model.PointLimit,
                PointSystem         = model.PointSystem,
                ProductionOrderNo   = model.ProductionOrderNo,
                ProductionOrderType = dpModel?.ProductionOrderType,
                ShiftIm             = dpModel?.DyeingPrintingAreaInput.Shift,
                UId                 = model.UId,
                Uom                 = dpModel?.UomUnit,
                ProductionOrderId   = dpModel?.ProductionOrderId,
                FabricGradeTests    = model.FabricGradeTests.Select(s => new FabricGradeTestViewModel()
                {
                    Active               = s.Active,
                    AvalALength          = s.AvalALength,
                    AvalBLength          = s.AvalBLength,
                    AvalConnectionLength = s.AvalConnectionLength,
                    CreatedAgent         = s.CreatedAgent,
                    CreatedBy            = s.CreatedBy,
                    CreatedUtc           = s.CreatedUtc,
                    DeletedAgent         = s.DeletedAgent,
                    DeletedBy            = s.DeletedBy,
                    DeletedUtc           = s.DeletedUtc,
                    FabricGradeTest      = s.FabricGradeTest,
                    FinalArea            = s.FinalArea,
                    FinalGradeTest       = s.FinalGradeTest,
                    FinalLength          = s.FinalLength,
                    FinalScore           = s.FinalScore,
                    Grade             = s.Grade,
                    Id                = s.Id,
                    InitLength        = s.InitLength,
                    IsDeleted         = s.IsDeleted,
                    LastModifiedAgent = s.LastModifiedAgent,
                    LastModifiedBy    = s.LastModifiedBy,
                    LastModifiedUtc   = s.LastModifiedUtc,
                    PcsNo             = s.PcsNo,
                    PointLimit        = s.PointLimit,
                    PointSystem       = s.PointSystem,
                    SampleLength      = s.SampleLength,
                    Score             = s.Score,
                    Type              = s.Type,
                    Width             = s.Width,
                    Criteria          = s.Criteria.Select(c => new CriteriaViewModel()
                    {
                        Code  = c.Code,
                        Group = c.Group,
                        Id    = c.Id,
                        Index = c.Index,
                        Name  = c.Name,
                        Score = new Score()
                        {
                            A = c.ScoreA,
                            B = c.ScoreB,
                            C = c.ScoreC,
                            D = c.ScoreD
                        }
                    }).ToList()
                }).ToList()
            };

            return(vm);
        }
        public async Task <int> UpdateAsync(int id, FabricQualityControlModel model)
        {
            await FabricQualityControlLogic.UpdateModelAsync(id, model);

            return(await DbContext.SaveChangesAsync());
        }