Ejemplo n.º 1
0
        public async Task AddGoodsReceivedNote(AddGoodsReceivedNote model)
        {
            await RunTaskInTransaction(async() =>
            {
                var note = new Data_Access_Layer.GoodsReceivedNote
                {
                    DocumentId  = model.DocumentId,
                    IssueDate   = model.IssueDate,
                    ReceiveDate = model.ReceiveDate,
                    InvoiceId   = model.InvoiceId
                };

                await GoodsReceivedNoteRepository.Add(note);

                var invoiceEntries = EntryRepository.GetForInvoice(model.InvoiceId);

                foreach (var noteEntry in model.NoteEntry)
                {
                    var productEntity = await ProductRepository.Find(noteEntry.Name);

                    Data_Access_Layer.ProductDetail productDetail = null;

                    var entry = invoiceEntries
                                .FirstOrDefault(ie => ie.Name == noteEntry.Name);

                    if (productEntity == null)
                    {
                        var product = new Data_Access_Layer.Product
                        {
                            Name  = entry.Name,
                            Price = entry.Price,
                            VAT   = entry.VAT
                        };

                        await ProductRepository.Add(product);

                        productDetail = new Data_Access_Layer.ProductDetail
                        {
                            LocationId = noteEntry.Location.Id,
                            ProductId  = product.Id,
                            Count      = entry.Count,
                        };

                        await ProductDetailsRepository.Add(productDetail);

                        continue;
                    }

                    var productDetails = ProductDetailsRepository
                                         .GetForProduct(productEntity.Id)
                                         .FirstOrDefault(pd => pd.LocationId == noteEntry.Location.Id);

                    productDetails.Count += entry.Count;

                    ProductDetailsRepository.Update(productDetails);
                }

                return(string.Empty);
            });
        }
        public async Task <IActionResult> AddGoodsReceivedNote([FromBody] AddGoodsReceivedNote model)
        {
            await _unitOfWork.AddGoodsReceivedNote(model);

            return(Ok());
        }