private async Task SaveSignatures(OperationCardModel operationCardModel, IDbSession dbSession, int operationCardId)
        {
            var ids = (operationCardModel.Blocks ?? new List <OperationCardModel.Block>()).Select(x => x.LogPKID)
                      .Concat((operationCardModel.Grindings ?? new List <OperationCardModel.Grinding>()).Select(x => x.LogPKID))
                      .Concat((operationCardModel.ISTs ?? new List <OperationCardModel.IST>()).Select(x => x.LogPKID))
                      .ToArray();

            var existingIds = await dbSession.Set <OperationCardLogs>()
                              .Where(x => ids.Contains(x.ID))
                              .Select(x => x.ID)
                              .ToArrayAsync();

            foreach (var item in operationCardModel.Blocks)
            {
                if (existingIds.Any(x => x == item.LogPKID))
                {
                    continue;
                }

                var operationCardLog = new OperationCardLogs()
                {
                    ID = item.LogPKID,
                    OperationCardID = operationCardId,
                    Type            = "Block",
                    Content         = item.Weight,
                    LoggedError     = null,
                    Date            = item.Date,
                    OperatorID      = item.Operator.ID
                };

                dbSession.Set <OperationCardLogs>().Add(operationCardLog);
            }

            foreach (var item in operationCardModel.Grindings)
            {
                if (existingIds.Any(x => x == item.LogPKID))
                {
                    continue;
                }

                var operationCardLog = new OperationCardLogs()
                {
                    ID = item.LogPKID,
                    OperationCardID = operationCardId,
                    Type            = "Grinding",
                    Content         = item.GrindingTime.ToString(),
                    LoggedError     = item.Error,
                    Date            = item.Date,
                    OperatorID      = item.Operator.ID
                };

                dbSession.Set <OperationCardLogs>().Add(operationCardLog);
            }

            foreach (var item in operationCardModel.ISTs)
            {
                if (existingIds.Any(x => x == item.LogPKID))
                {
                    continue;
                }

                var operationCardLog = new OperationCardLogs()
                {
                    ID = item.LogPKID,
                    OperationCardID = operationCardId,
                    Type            = "IST",
                    Content         = item.Ist,
                    LoggedError     = null,
                    Date            = item.Date,
                    OperatorID      = item.Operator.ID
                };

                dbSession.Set <OperationCardLogs>().Add(operationCardLog);
            }
        }
        private async Task SaveSubstances(OperationCardModel operationCardModel, IDbFacade dbFacade, IDbSession dbSession, OperationCard operationCard)
        {
            if (operationCardModel.Substances.Operator == null && operationCardModel.Substances.SubstanceList == null)
            {
                return;
            }
            if (operationCardModel.Substances.SubstanceList.Count == 0)
            {
                return;
            }

            var operationCardLogSubst = new OperationCardLogs()
            {
                ID = operationCardModel.Substances.LogPKID,
                OperationCardID = operationCard.ID,
                Type            = "Substances",
                Content         = null,
                LoggedError     = null,
                Date            = operationCardModel.Substances != null ? operationCardModel.Substances.Date : new DateTime(),
                OperatorID      = operationCardModel.Substances != null ? operationCardModel.Substances.Operator.ID : -1
            };

            // Substance TimeStamp
            if (operationCardLogSubst.OperatorID != -1)
            {
                if (!await dbSession.Set <OperationCardLogs>().AnyAsync(u => u.ID == operationCardLogSubst.ID))
                {
                    dbSession.Set <OperationCardLogs>().Add(operationCardLogSubst);
                }
                else
                {
                    var logEntry = await dbSession.Set <OperationCardLogs>().FirstOrDefaultAsync(u => u.ID == operationCardLogSubst.ID);

                    logEntry.Date       = operationCardModel.Substances.Date;
                    logEntry.OperatorID = operationCardModel.Substances.Operator.ID;
                }
            }

            // Substances
            if (operationCardModel.Substances?.SubstanceList != null)
            {
                // Get Instruction Recipe Materials
                var instructionRecipeMaterials = new GetAllSubstances(dbFacade).Execute(operationCardModel.HeatNumber);

                // Get Instruction
                var instruction = dbSession.Set <Instruction>()
                                  .Include(x => x.Materials)
                                  .Where(x => x.ID == operationCard.InstructionID)
                                  .FirstOrDefault();

                foreach (var item in operationCardModel.Substances?.SubstanceList.Where(x => x.Weight > 0))
                {
                    // Add or Update to the newest Amounts
                    if (instruction.Materials.Any(y => y.MaterialID == item.Subst.ID))
                    {
                        instruction.Materials.FirstOrDefault(y => y.MaterialID == item.Subst.ID).Amount = item.Weight;
                    }
                    else
                    {
                        instruction.Materials.Add(new InstructionMaterial()
                        {
                            InstructionID = instruction.ID,
                            MaterialID    = item.Subst.ID,
                            Amount        = item.Weight
                        });
                    }
                }
            }
        }