예제 #1
0
        public async void CreateInstruction(InstructionDraft instructionDraft)
        {
            var pdfCreated   = _instructionPdfService.CreateInstructionPdf(instructionDraft);
            var instructions = new List <Instruction>();
            var instructor   = await GetUser(instructionDraft.Instructor);

            for (var i = 0; i < instructionDraft.Instructed.Count; i++)
            {
                var instructionPath = pdfCreated[i];
                if (instructionPath is null)
                {
                    continue;
                }

                var userDraft = instructionDraft.Instructed[i];
                var user      = await GetUser(userDraft);

                var instruction = new Instruction
                {
                    DeviceId            = instructionDraft.Device.Id,
                    AllowedActivities   = instructionDraft.OnlyFor,
                    ForbiddenActivities = instructionDraft.ExceptFor,
                    Path         = instructionPath,
                    InstructorId = instructor.Id,
                    InstructedId = user.Id,
                    CreatedAt    = DateTime.Now,
                };

                instruction = await _instructionDataService.Create(instruction);

                instructions.Add(instruction);
            }

            ArchiveOlderInstructions(instructions);
        }
예제 #2
0
        public IList <string> CreateInstructionPdf(InstructionDraft instructionDraft)
        {
            var device = instructionDraft.Device;
            var instructionFolderPath = GetDeviceInstructionsPath(device);

            return((from userDraft in instructionDraft.Instructed
                    let instructionPath = Path.Combine(instructionFolderPath, userDraft.FileName)
                                          select FillAndSavePdf(userDraft, instructionDraft, instructionPath)).ToList());
        }
예제 #3
0
        private string FillAndSavePdf(UserDraft userDraft, InstructionDraft instructionDraft, string instructionPath)
        {
            try
            {
                using var reader = new PdfReader(_templateFilePath);
                using var writer = new PdfWriter(instructionPath);
                using var pdf    = new PdfDocument(reader, writer);

                var form = PdfAcroForm.GetAcroForm(pdf, true);
                var doc  = new Document(pdf);

                form.SetGenerateAppearance(true);

                form.GetField("deviceName").SetValue(instructionDraft.Device.Name);
                form.GetField("deviceChief").SetValue(instructionDraft.Device.Chief?.FullName ?? string.Empty);
                form.GetField("onlyFor").SetValue(instructionDraft.OnlyFor ?? string.Empty);
                form.GetField("notFor").SetValue(instructionDraft.ExceptFor ?? string.Empty);
                form.GetField("instructor").SetValue(instructionDraft.Instructor.FullName);
                form.GetField("instructed").SetValue(userDraft.FullName);
                form.GetField("instructionDate").SetValue(DateTime.Today.ToString("d", CultureInfo.CurrentCulture));

                //var signatureImage = PositionImage(form, "instructorSignature", instructionDraft.Instructor.Signature);
                //var instructedImage = PositionImage(form, "instructedSignature", userDraft.Signature);

                //doc.Add(signatureImage);
                //doc.Add(instructedImage);
                form.RemoveField("instructorSignature");
                form.RemoveField("instructedSignature");
                doc.Close();
                pdf.Close();
            }
            catch (Exception e)
            {
                _logger.Error(e, "Instruction pdf could not be filled or saved.");
                if (File.Exists(instructionPath))
                {
                    File.Delete(instructionPath);
                }
                return(null);
            }

            return(instructionPath);
        }