public async Task CreateOrUpdateCycleStep(CycleStepItemViewModel cycleStepItemViewModel) { CycleStep cycleStepToInsertOrUpdate; if (cycleStepItemViewModel.IsNew) { cycleStepToInsertOrUpdate = new CycleStep(); SynthesisCycle synthesisCycle = unitOfWork.GetById <SynthesisCycle>(cycleStepItemViewModel.SynthesisCycleId); cycleStepToInsertOrUpdate.SynthesisCycle = synthesisCycle; await MapCycleStepItemToCycleStep(cycleStepItemViewModel, cycleStepToInsertOrUpdate); } else { cycleStepToInsertOrUpdate = await unitOfWork.GetAll <CycleStep>() .Include(x => x.SynthesisCycle) .Include(x => x.HardwareFunction) .SingleAsync(x => x.Id == cycleStepItemViewModel.CycleStepId); await MapCycleStepItemToCycleStep(cycleStepItemViewModel, cycleStepToInsertOrUpdate); } unitOfWork.InsertOrUpdate(cycleStepToInsertOrUpdate); unitOfWork.Commit(); if (cycleStepItemViewModel.IsNew) { await UpdateStepNumbersOnInsert(cycleStepItemViewModel, cycleStepToInsertOrUpdate); } }
private async Task MapCycleStepItemToCycleStep(CycleStepItemViewModel cycleStepItemViewModel, CycleStep cycleStep) { cycleStep.Number = cycleStepItemViewModel.StepNumber != 0 ? cycleStepItemViewModel.StepNumber : 1; cycleStep.StepTime = cycleStepItemViewModel.StepTime; cycleStep.A = cycleStepItemViewModel.A; cycleStep.G = cycleStepItemViewModel.G; cycleStep.C = cycleStepItemViewModel.C; cycleStep.T = cycleStepItemViewModel.T; cycleStep.T = cycleStepItemViewModel.T; cycleStep.Six = cycleStepItemViewModel.Six; cycleStep.Seven = cycleStepItemViewModel.Seven; cycleStep.SafeStep = cycleStepItemViewModel.SafeStep; if (string.IsNullOrWhiteSpace(cycleStepItemViewModel.HardwareFunction?.Id)) { cycleStep.HardwareFunction = await unitOfWork.GetAll <HardwareFunction>() .SingleAsync(x => x.FunctionType == HardwareFunctionType.BAndTetToCol); } else if (cycleStep.HardwareFunctionId != cycleStepItemViewModel.HardwareFunction.Id) { cycleStep.HardwareFunction = unitOfWork.GetById <HardwareFunction>(cycleStepItemViewModel.HardwareFunction.Id); } }
private async Task UpdateStepNumbersOnInsert(CycleStepItemViewModel cycleStepItemViewModel, CycleStep cycleStepToInsertOrUpdate) { bool cycleStepWithTheSameNumberExists = await unitOfWork.GetAll <CycleStep>() .CountAsync(x => x.SynthesisCycleId == cycleStepItemViewModel.SynthesisCycleId && x.Number == cycleStepToInsertOrUpdate.Number) > 1; if (cycleStepWithTheSameNumberExists) { IEnumerable <CycleStep> cycleSteps = await unitOfWork.GetAll <CycleStep>() .Include(x => x.SynthesisCycle) .Include(x => x.HardwareFunction) .Where(x => x.SynthesisCycleId == cycleStepItemViewModel.SynthesisCycleId && x.Number >= cycleStepToInsertOrUpdate.Number && x.Id != cycleStepToInsertOrUpdate.Id) .OrderBy(x => x.Number) .ToListAsync(); foreach (CycleStep cycleStep in cycleSteps) { cycleStep.Number++; } unitOfWork.Commit(); } }