Пример #1
0
        public void MapToPOLineItemDTO_NullContent_ReturnNull()
        {
            //Act
            var response = PurchaseOrderDTO.MapToPOLineItemDTO(null);

            //Assert
            Assert.IsNull(response);
        }
Пример #2
0
        public void MapToPOLineItemDTO_ValidEntity_ReturnDTOEntity()
        {
            //Act
            var response = PurchaseOrderDTO.MapToPOLineItemDTO(purchaseOrder);

            //Assert
            Assert.IsNotNull(response);
            Assert.AreEqual(purchaseOrder.Id, response.Id);
            Assert.AreEqual(purchaseOrder.Item, response.Item);
            Assert.AreEqual(purchaseOrder.AccountingTotal, response.AccountingTotal);
            Assert.AreEqual(purchaseOrder.ProjectDescription, response.ProjectDescription);
            Assert.AreEqual(purchaseOrder.Commodity, response.Commodity);
            Assert.AreEqual(purchaseOrder.CostCode, response.CostCode);
            Assert.AreEqual(purchaseOrder.FixedAsset, response.FixedAsset);
            Assert.AreEqual(purchaseOrder.TargetLocationCode, response.TargetLocationCode);
            Assert.AreEqual(purchaseOrder.ShipTo, response.ShipTo);
            Assert.AreEqual(purchaseOrder.RequestedBy, response.RequestedBy);
            Assert.AreEqual(purchaseOrder.CreatedBy, response.CreatedBy);
            Assert.AreEqual(purchaseOrder.LastUpdatedBy, response.LastUpdatedBy);
            Assert.AreEqual(purchaseOrder.POHeaderId, response.POHeaderId);
        }
Пример #3
0
        public CoupaImporterJobDefinitionDTO ProcessPurchaseOrderImportJob(Guid jobDefinitionId)
        {
            var jobDefinition = _coupaImporterRepository.Get(jobDefinitionId);

            if (jobDefinition == null)
            {
                return(null);
            }

            _unitOfWork.AutoDetectChanges(false);

            var pOHeaders      = new List <POHeader>();
            var purchaseOrders = new List <PurchaseOrderDTO>();

            // Here we use 1000 records batch so that we can reduce the number of loops.
            var noOfRotation = jobDefinition.CoupaImporterJobDefinitionDetails.Count() / 1000;

            noOfRotation += jobDefinition.CoupaImporterJobDefinitionDetails.Count() % 1000 > 0 ? 1 : 0;

            for (var i = 0; i < noOfRotation; i++)
            {
                var strCoupaImporterJobDefinitionDetails = "[ ";
                strCoupaImporterJobDefinitionDetails += string.Join(", ", jobDefinition.CoupaImporterJobDefinitionDetails
                                                                    .Skip(i * 1000).Take(1000).Select(x => x.RawContent));
                strCoupaImporterJobDefinitionDetails += " ]";

                // Convert the RawContent to POHeader
                pOHeaders.AddRange(JsonConvert.DeserializeObject <List <POHeader> >(strCoupaImporterJobDefinitionDetails));
                // Convert the RawContent to PurchaseOrderDTO
                purchaseOrders.AddRange(JsonConvert.DeserializeObject <List <PurchaseOrderDTO> >(strCoupaImporterJobDefinitionDetails));
            }

            // In every InvoiceHeader Entity ProjectId is added
            pOHeaders.ForEach(i => { i.ProjectId = jobDefinition.ProjectId; i.Id = Guid.NewGuid(); });

            // Grouping InvoiceHeaders in terms of Unique combination of Supplier & InvoiceNumber
            pOHeaders = pOHeaders.GroupBy(i => new { i.PurchaseOrderNumber, i.Supplier }).Select(x => x.First()).ToList();

            foreach (var objPoHeader in pOHeaders)
            {
                // Allocate all line items for a invoice header + InvoiceHeaderId added in every associated Line Items.
                objPoHeader.POLineItems = purchaseOrders.Where(x => x.Supplier == objPoHeader.Supplier && x.PurchaseOrderNumber == objPoHeader.PurchaseOrderNumber)
                                          .Select(x => POLineItem.MapFromDomainEntity(PurchaseOrderDTO.MapToPOLineItemDTO(x))).ToList();
                objPoHeader.POLineItems.ToList().ForEach(x => { x.POHeaderId = objPoHeader.Id; x.Id = Guid.NewGuid(); });

                _projectPurchaseOrderRepository.Add(objPoHeader);
            }

            // At last update all job definition details records
            jobDefinition.CoupaImporterJobDefinitionDetails.ToList().ForEach(c => { c.IsProcessed = true; c.IsSuccessful = true; });
            _coupaImporterRepository.UpdateAllJobDefinitionDetail(jobDefinitionId, jobDefinition.CoupaImporterJobDefinitionDetails);

            jobDefinition.Status = (int)CoupaImporterStatus.Processed;
            _coupaImporterRepository.Update(jobDefinitionId, jobDefinition);

            _unitOfWork.SaveChanges();
            _unitOfWork.AutoDetectChanges(true);

            return(CoupaImporterJobDefinitionDTO.MapFromDatabaseEntity(jobDefinition));
        }