public async Task <IActionResult> PutTravelOrderDocumentItem(long id, TravelOrderDocumentItem travelOrderDocumentItem)
        {
            if (id != travelOrderDocumentItem.Id)
            {
                return(BadRequest());
            }

            _context.Entry(travelOrderDocumentItem).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TravelOrderDocumentItemExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <TravelOrderDocumentItem> > PostTravelOrderDocumentItem(TravelOrderDocumentItem travelOrderDocumentItem)
        {
            _context.TravelOrderDocumentItems.Add(travelOrderDocumentItem);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTravelOrderDocumentItem", new { id = travelOrderDocumentItem.Id }, travelOrderDocumentItem));
        }
        public List <TravelOrderDocumentItem> GenerateDocumentsFromData()
        {
            List <TravelOrderDocumentItem> travelOrderDocumentItems = new List <TravelOrderDocumentItem>();

            using (var mainDoc = WordprocessingDocument.Open(_documentTemplatePath, false))
            {
                foreach (var travelOrderDataItem in _travelOrderDataItems)
                {
                    var newDocumentPath = Path.Combine(_generatedDocumentsPath, _listId.ToString(), travelOrderDataItem.FileName);
                    Directory.CreateDirectory(Path.GetDirectoryName(newDocumentPath));
                    using var generatedDocument = WordprocessingDocument.Create(newDocumentPath, WordprocessingDocumentType.Document);
                    // copy parts from source document to new document
                    foreach (var part in mainDoc.Parts)
                    {
                        generatedDocument.AddPart(part.OpenXmlPart, part.RelationshipId);
                    }

                    IDictionary <String, BookmarkStart> bookmarkMap = new Dictionary <String, BookmarkStart>();

                    foreach (BookmarkStart bookmarkStart in generatedDocument.MainDocumentPart.RootElement.Descendants <BookmarkStart>())
                    {
                        bookmarkMap[bookmarkStart.Name] = bookmarkStart;
                    }

                    foreach (BookmarkStart bookmarkStart in bookmarkMap.Values)
                    {
                        OpenXmlElement elem = bookmarkStart.NextSibling();

                        while (elem != null && !(elem is BookmarkEnd))
                        {
                            OpenXmlElement nextElem = elem.NextSibling();
                            elem.Remove();
                            elem = nextElem;
                        }

                        switch (bookmarkStart.Name.Value)
                        {
                        case "Zaposleni":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.Employee)), bookmarkStart);
                            break;

                        case "Skracenica":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.InitialsShorthand)), bookmarkStart);
                            break;

                        case "RedniBroj":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.OrderNumber)), bookmarkStart);
                            break;

                        case "RadnoMesto":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.Role)), bookmarkStart);
                            break;

                        case "Mesto":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.City)), bookmarkStart);
                            break;

                        case "DateStart":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.DateStart)), bookmarkStart);
                            break;

                        case "DateEnd":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.DateEnd)), bookmarkStart);
                            break;

                        case "DatePaid":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.DatePaid)), bookmarkStart);
                            break;

                        case "NumberOfDays":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.NumberOfDays)), bookmarkStart);
                            break;

                        case "AmountPerDay":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.AmountPerDay)), bookmarkStart);
                            break;

                        case "AmountSumForDays":
                            bookmarkStart.Parent.InsertAfter <Run>(new Run(new Text(travelOrderDataItem.AmountSumForDays)), bookmarkStart);
                            break;
                        }
                    }

                    var travelOrderDocumentItem = new TravelOrderDocumentItem
                    {
                        ListId = _listId,
                        Name   = travelOrderDataItem.FileName,
                        Path   = newDocumentPath
                    };

                    travelOrderDocumentItems.Add(travelOrderDocumentItem);
                }
            }

            return(travelOrderDocumentItems);
        }