Exemplo n.º 1
0
        protected virtual void CalculateDeadStockValues(LumDeadStockEnqResult result,
                                                        INSiteStatus siteStatus, INItemSiteHistDay currentRow, decimal deadStockQty)
        {
            decimal deadStockQtyCounter = deadStockQty;

            result.InDeadStockDays    = 0m;
            result.TotalDeadStockCost = 0m;

            IEnumerable <INItemSiteHistDay> lastRows = GetLastRows(siteStatus, deadStockQty, currentRow);

            foreach (INItemSiteHistDay lastRow in lastRows)
            {
                if ((lastRow.QtyDebit ?? 0m) == 0m)
                {
                    continue;
                }

                if (CalculateDeadStockValues(ref deadStockQtyCounter, result, lastRow))
                {
                    return;
                }
            }

            OnNotEnoughINItemSiteHistDRecords(siteStatus, currentRow, deadStockQty, deadStockQtyCounter);
        }
Exemplo n.º 2
0
        protected virtual IEnumerable result()
        {
            var filter = Filter.Current;

            if (!ValidateFilter(filter))
            {
                return(new LumDeadStockEnqResult[0]);
            }

            GetStartDates(filter, out DateTime? inStockSince, out DateTime? noSalesSince);
            PXSelectBase <INSiteStatus> command = CreateCommand();
            var parameters = AddFilters(filter, command, inStockSince, noSalesSince);

            var singleRow = GetRowByPrimaryKeys(command, filter, inStockSince, noSalesSince);

            if (singleRow != null)
            {
                return new LumDeadStockEnqResult[] { singleRow }
            }
            ;

            bool userSortsFilters = ValidateViewSortsFilters();

            var result = new PXDelegateResult();

            result.IsResultFiltered = !userSortsFilters;
            result.IsResultSorted   = !userSortsFilters;
            int resultCounter = 0;

            foreach (PXResult <INSiteStatus> row in command.Select(parameters.ToArray()))
            {
                LumDeadStockEnqResult newResult = MakeResult(row, inStockSince, noSalesSince);

                if (newResult == null)
                {
                    continue;
                }

                result.Add(new PXResult <LumDeadStockEnqResult, InventoryItem>(newResult, row.GetItem <InventoryItem>()));
                resultCounter++;

                if (!userSortsFilters && (PXView.StartRow + PXView.MaximumRows) <= resultCounter)
                {
                    break;
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        protected virtual LumDeadStockEnqResult MakeResult(PXResult <INSiteStatus> selectResult,
                                                           DateTime?inStockSince, DateTime?noSalesSince)
        {
            INSiteStatus      siteStatus = selectResult;
            INItemSiteHistDay currentRow = GetCurrentINItemSiteHistD(siteStatus, inStockSince, noSalesSince);

            decimal deadStockQty = currentRow?.EndQty ?? 0m;

            if (deadStockQty <= 0m)
            {
                return(null);
            }

            decimal?negativeQty = GetNegativeQty(siteStatus, inStockSince, noSalesSince);

            deadStockQty -= negativeQty ?? 0m;
            if (deadStockQty <= 0m)
            {
                return(null);
            }

            var result = new LumDeadStockEnqResult()
            {
                BaseCuryID   = Company.Current.BaseCuryID,
                DeadStockQty = deadStockQty,
                InStockQty   = siteStatus.QtyOnHand,
                SiteID       = siteStatus.SiteID,
                LastCost     = GetLastCost(siteStatus),
                LastSaleDate = GetLastSaleDate(siteStatus),
                InventoryID  = siteStatus.InventoryID,
                SubItemID    = siteStatus.SubItemID
            };

            CalculateDeadStockValues(result, siteStatus, currentRow, deadStockQty);

            return(result);
        }
Exemplo n.º 4
0
        protected virtual bool CalculateDeadStockValues(ref decimal deadStockQtyCounter,
                                                        LumDeadStockEnqResult result, INItemSiteHistDay lastRow)
        {
            decimal qtyDebit = (decimal)lastRow.QtyDebit;
            decimal mult     = (deadStockQtyCounter >= qtyDebit) ? 1m : (deadStockQtyCounter / qtyDebit);

            //result.TotalDeadStockCost += (lastRow.CostDebit ?? 0m) * mult;
            result.TotalDeadStockCost += result.DeadStockQty * result.LastCost;

            decimal days = (decimal)GetCurrentDate().Subtract(lastRow.SDate.Value.Date).TotalDays;

            result.InDeadStockDays += days * qtyDebit * mult;

            deadStockQtyCounter -= qtyDebit;

            if (deadStockQtyCounter <= 0m)
            {
                result.AverageItemCost  = result.TotalDeadStockCost / result.DeadStockQty;
                result.InDeadStockDays /= result.DeadStockQty;
                return(true);
            }

            return(false);
        }