Пример #1
0
        public void GetCompatibleParts_PartNumberInTheDataList_FindCompatibleParts()
        {
            //Arrange
            string        partNumber    = "5772-MetaDATA";
            PartCatalogue partCatalogue = new PartCatalogue();

            //Act
            IEnumerable <PartSummary> compatibleParts = partCatalogue.GetCompatibleParts(partNumber);
            PartSummary compatiblePart = compatibleParts.First(x => x.PartNumber == partNumber);

            //Assert
            Assert.AreEqual(partNumber, compatiblePart.PartNumber);
        }
Пример #2
0
            public void TestListPartsOk()
            {
                string        uploadId = this.client.InitiateMultipartUpload(this.bucketName, "test").UploadId;
                List <string> eTags    = new List <string>();

                for (int i = 0; i < 10; ++i)
                {
                    eTags.Add(this.client.UploadPart(new UploadPartRequest()
                    {
                        BucketName  = this.bucketName,
                        Key         = "test",
                        UploadId    = uploadId,
                        PartNumber  = i + 1,
                        PartSize    = 1,
                        InputStream = new MemoryStream(Encoding.Default.GetBytes(i.ToString()))
                    }).ETag);
                }
                ListPartsResponse response = this.client.ListParts(this.bucketName, "test", uploadId);

                Assert.AreEqual(response.BucketName, this.bucketName);
                Assert.AreEqual(response.IsTruncated, false);
                Assert.AreEqual(response.Key, "test");
                Assert.AreEqual(response.MaxParts, 1000);
                Assert.AreEqual(response.NextPartNumberMarker, 10);
                Assert.AreEqual(response.Owner.Id, this.owner.Id);
                Assert.AreEqual(response.PartNumberMarker, 0);
                Assert.AreEqual(response.UploadId, uploadId);
                Assert.AreEqual(BosConstants.StorageClass.Standard, response.StorageClass);
                List <PartSummary> parts = response.Parts;

                Assert.AreEqual(parts.Count, 10);
                for (int i = 0; i < 10; ++i)
                {
                    PartSummary part = parts[i];
                    Assert.AreEqual(part.ETag, eTags[i]);
                    Assert.AreEqual(part.PartNumber, i + 1);
                    Assert.AreEqual(part.Size, 1);
                    Assert.IsTrue(Math.Abs(part.LastModified.Subtract(DateTime.UtcNow).TotalSeconds) < 60);
                }
            }
Пример #3
0
            public void TestOrdinary()
            {
                String             uploadId = this.client.InitiateMultipartUpload(this.bucketName, "test").UploadId;
                UploadPartResponse response = this.client.UploadPart(new UploadPartRequest()
                {
                    BucketName  = this.bucketName,
                    Key         = "test",
                    UploadId    = uploadId,
                    PartNumber  = 1,
                    PartSize    = 4,
                    InputStream = new MemoryStream(Encoding.Default.GetBytes("data"))
                });

                Assert.AreEqual(response.PartNumber, 1);
                Assert.IsNotNull(response.ETag);
                List <PartSummary> parts = this.client.ListParts(this.bucketName, "test", uploadId).Parts;

                Assert.AreEqual(parts.Count, 1);
                PartSummary part = parts[0];

                Assert.IsNotNull(part);
                Assert.AreEqual(part.ETag, response.ETag);
                Assert.AreEqual(part.Size, 4L);
            }
Пример #4
0
        public async Task <MonthlyReportOutput> Execute(MonthlyReportInput input)
        {
            var dStart = new DateTime(input.StartDate.Year, input.StartDate.Month, input.StartDate.Day, 0, 0, 0, DateTimeKind.Local);
            var dStop  = new DateTime(input.StopDate.Year, input.StopDate.Month, input.StopDate.Day, 23, 59, 59, DateTimeKind.Local);
            IEnumerable <PartInstance> partInstances = new List <PartInstance>();

            switch (input.CollectType)
            {
            case CollectType.OnlyCostReported:
                partInstances = await this._partInstanceProvider.GetEntityListAsync(instance => instance.CostReported || (instance.IsBubbler && instance.DateInstalled >= dStart && instance.DateInstalled <= dStop && instance.Transactions.Where(e => e.InventoryAction == InventoryAction.RETURNING).Count() == 0));

                break;

            case CollectType.AllItems:
                partInstances = await this._partInstanceProvider.GetEntityListAsync();

                break;

            case CollectType.OnlyCostNotReported:
                partInstances = await this._partInstanceProvider.GetEntityListAsync(instance => !instance.CostReported);

                break;
            }
            var           monthlyReport     = new List <PartSummary>();
            StringBuilder transactionBuffer = new StringBuilder();

            foreach (var partInstance in partInstances)
            {
                DateTime dateIn;
                var      temp = partInstance.Transactions.OrderByDescending(e => e.TimeStamp).FirstOrDefault(e => e.InventoryAction == InventoryAction.INCOMING);
                dateIn = (temp != null) ? temp.TimeStamp : DateTime.Now;
                var today = DateTime.Now;

                var incomingTransactions = from transaction in partInstance.Transactions
                                           where (transaction.TimeStamp >= dStart && transaction.InventoryAction == InventoryAction.INCOMING)
                                           select transaction;

                var outgoingTransactions = from transaction in partInstance.Transactions
                                           where (transaction.TimeStamp >= dStart && transaction.InventoryAction == InventoryAction.OUTGOING)
                                           select transaction;

                var returningTransactions = from transaction in partInstance.Transactions
                                            where (transaction.TimeStamp >= dStart && transaction.InventoryAction == InventoryAction.RETURNING)
                                            select transaction;

                double incomingQtyTotal, incomingQtyRange, outgoingQtyTotal, outgoingQtyRange, currentQty;
                double incomingCostTotal, incomingCostRange, outgoingCostTotal, outgoingCostRange, currentCost;

                if (partInstance.IsBubbler)
                {
                    incomingQtyTotal = incomingTransactions.Sum(e => e.MeasuredWeight);

                    incomingQtyTotal  = incomingTransactions.Sum(e => e.MeasuredWeight);
                    incomingCostTotal = incomingTransactions.Sum(e => e.TotalCost);
                    //incomingCostTotal = incomingTransactions.Sum(e => e.MeasuredWeight * e.UnitCost);

                    incomingQtyRange  = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.MeasuredWeight);
                    incomingCostRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.TotalCost);
                    //incomingCostRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.MeasuredWeight * e.UnitCost);

                    outgoingQtyTotal  = outgoingTransactions.Sum(e => e.MeasuredWeight);
                    outgoingCostTotal = outgoingTransactions.Sum(e => e.TotalCost);
                    //outgoingCostTotal = outgoingTransactions.Sum(e => e.MeasuredWeight * e.UnitCost);

                    outgoingQtyRange  = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.MeasuredWeight);
                    outgoingCostRange = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.MeasuredWeight * e.UnitCost);
                    currentQty        = partInstance.BubblerParameter.Measured * partInstance.Quantity;
                    currentCost       = partInstance.UnitCost * currentQty;

                    //incomingQtyTotal = incomingTransactions.Sum(e => e.PartInstance.BubblerParameter.Measured);
                    ////incomingCostTotal = incomingTransactions.Sum(e => e.TotalCost);
                    //incomingCostTotal = incomingTransactions.Sum(e => e.PartInstance.BubblerParameter.Measured * e.UnitCost);

                    //incomingQtyRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.PartInstance.BubblerParameter.Measured);
                    ////incomingCostRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.TotalCost);
                    //incomingCostRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.PartInstance.BubblerParameter.Measured * e.UnitCost);

                    //outgoingQtyTotal = outgoingTransactions.Sum(e => e.PartInstance.BubblerParameter.Measured);
                    ////outgoingCostTotal = outgoingTransactions.Sum(e => e.TotalCost);
                    //outgoingCostTotal = outgoingTransactions.Sum(e => e.PartInstance.BubblerParameter.Measured * e.UnitCost);

                    //outgoingQtyRange = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.PartInstance.BubblerParameter.Measured);
                    //outgoingCostRange = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.PartInstance.BubblerParameter.Measured * e.UnitCost);
                    //currentQty = partInstance.BubblerParameter.Measured;
                    //currentCost = partInstance.UnitCost*currentQty;
                }
                else
                {
                    incomingQtyTotal  = incomingTransactions.Sum(e => e.Quantity);
                    incomingCostTotal = incomingTransactions.Sum(e => e.TotalCost);

                    incomingQtyRange  = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.Quantity);
                    incomingCostRange = incomingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.TotalCost);

                    outgoingQtyTotal  = outgoingTransactions.Sum(e => e.Quantity);
                    outgoingCostTotal = outgoingTransactions.Sum(e => e.TotalCost);

                    outgoingQtyRange  = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.Quantity);
                    outgoingCostRange = outgoingTransactions.Where(e => e.TimeStamp <= dStop).Sum(e => e.TotalCost);
                    currentQty        = partInstance.Quantity;
                    currentCost       = partInstance.UnitCost * currentQty;
                }

                double outgoingCost = outgoingCostRange;
                double outgoingQty  = outgoingQtyRange;

                PartSummary partSummary = new PartSummary();
                partSummary.PartName     = partInstance.Part.Name;
                partSummary.InstanceName = partInstance.Name;
                partSummary.SerialNumber = partInstance.SerialNumber;
                partSummary.BatchNumber  = partInstance.BatchNumber;

                partSummary.DateIn = dateIn;
                partSummary.Age    = (today - partSummary.DateIn).Days;
                partSummary.Today  = today;

                partSummary.StartQuantity = (currentQty - incomingQtyTotal) + outgoingQtyTotal;
                partSummary.StartCost     = (currentCost - incomingCostTotal) + outgoingCostTotal;

                partSummary.EndQuantity = (partSummary.StartQuantity + incomingQtyRange) - outgoingQtyRange;
                partSummary.EndCost     = (partSummary.StartCost + incomingCostRange) - outgoingCostRange;

                partSummary.IncomingCost     = incomingCostRange;
                partSummary.IncomingQuantity = incomingQtyRange;

                partSummary.RndOutgoingCost     = outgoingCost * MonthlySummaryUseCase.RnDFactor;
                partSummary.RndOutgoingQuantity = outgoingQty * MonthlySummaryUseCase.RnDFactor;

                partSummary.ProductionOutgoingCost     = outgoingCost * MonthlySummaryUseCase.ProductionFactor;
                partSummary.ProductionOutgoingQuantity = outgoingQty * MonthlySummaryUseCase.ProductionFactor;

                partSummary.TotalOutgoingCost     = outgoingCostRange;
                partSummary.TotalOutgoingQuantity = outgoingQtyRange;

                partSummary.CurrentCost     = currentCost;
                partSummary.CurrentQuantity = currentQty;
                monthlyReport.Add(partSummary);
            }
            return(new MonthlyReportOutput(monthlyReport, true, "Done"));
        }