Exemple #1
0
        public InputInvoiceResponse Create(InputInvoiceViewModel re)
        {
            InputInvoiceResponse response = new InputInvoiceResponse();

            try
            {
                // Backup notes
                List <InputInvoiceNoteViewModel> inputInvoiceNotes = re.InputInvoiceNotes?.ToList();
                re.InputInvoiceNotes = null;

                // Backup documents
                List <InputInvoiceDocumentViewModel> inputInvoiceDocuments = re.InputInvoiceDocuments?.ToList();
                re.InputInvoiceDocuments = null;

                InputInvoice createdInputInvoice = unitOfWork.GetInputInvoiceRepository().Create(re.ConvertToInputInvoice());

                // Update notes
                if (inputInvoiceNotes != null && inputInvoiceNotes.Count > 0)
                {
                    // Items for create or update
                    foreach (var inputInvoiceNote in inputInvoiceNotes
                             .Where(x => x.ItemStatus == ItemStatus.Added || x.ItemStatus == ItemStatus.Edited)?.ToList() ?? new List <InputInvoiceNoteViewModel>())
                    {
                        inputInvoiceNote.InputInvoice = new InputInvoiceViewModel()
                        {
                            Id = createdInputInvoice.Id
                        };
                        inputInvoiceNote.ItemStatus = ItemStatus.Submited;
                        InputInvoiceNote createdInputInvoiceNote = unitOfWork.GetInputInvoiceNoteRepository()
                                                                   .Create(inputInvoiceNote.ConvertToInputInvoiceNote());
                    }

                    foreach (var item in inputInvoiceNotes
                             .Where(x => x.ItemStatus == ItemStatus.Deleted)?.ToList() ?? new List <InputInvoiceNoteViewModel>())
                    {
                        item.InputInvoice = new InputInvoiceViewModel()
                        {
                            Id = createdInputInvoice.Id
                        };
                        unitOfWork.GetInputInvoiceNoteRepository().Create(item.ConvertToInputInvoiceNote());

                        unitOfWork.GetInputInvoiceNoteRepository().Delete(item.Identifier);
                    }
                }

                // Update documents
                if (inputInvoiceDocuments != null && inputInvoiceDocuments.Count > 0)
                {
                    // Items for create or update
                    foreach (var inputInvoiceDocument in inputInvoiceDocuments
                             .Where(x => x.ItemStatus == ItemStatus.Added || x.ItemStatus == ItemStatus.Edited)?.ToList() ?? new List <InputInvoiceDocumentViewModel>())
                    {
                        inputInvoiceDocument.InputInvoice = new InputInvoiceViewModel()
                        {
                            Id = createdInputInvoice.Id
                        };
                        inputInvoiceDocument.ItemStatus = ItemStatus.Submited;
                        InputInvoiceDocument createdInputInvoiceDocument = unitOfWork.GetInputInvoiceDocumentRepository()
                                                                           .Create(inputInvoiceDocument.ConvertToInputInvoiceDocument());
                    }

                    foreach (var item in inputInvoiceDocuments
                             .Where(x => x.ItemStatus == ItemStatus.Deleted)?.ToList() ?? new List <InputInvoiceDocumentViewModel>())
                    {
                        item.InputInvoice = new InputInvoiceViewModel()
                        {
                            Id = createdInputInvoice.Id
                        };
                        unitOfWork.GetInputInvoiceDocumentRepository().Create(item.ConvertToInputInvoiceDocument());

                        unitOfWork.GetInputInvoiceDocumentRepository().Delete(item.Identifier);
                    }
                }

                unitOfWork.Save();

                response.InputInvoice = createdInputInvoice.ConvertToInputInvoiceViewModel();
                response.Success      = true;
            }
            catch (Exception ex)
            {
                response.InputInvoice = new InputInvoiceViewModel();
                response.Success      = false;
                response.Message      = ex.Message;
            }

            return(response);
        }