Esempio n. 1
0
        public IEnumerable <StockEventViewModel> GetBatchEvents(string batchId, string eventTypeName)
        {
            var etype =
                m_eventRepository.GetAllEventTypes().FirstOrDefault(etp => etp.TabTitle == eventTypeName).Ensure();

            var rawEvents =
                m_eventRepository.GetBatchEvents(BatchKey.Parse(batchId))
                .Where(e => e.TypeId == etype.Id)
                .Select(e => new StockEventViewModel(e));


            var result = new List <StockEventViewModel>();

            foreach (var rawEvent in rawEvents)
            {
                var sameGrpEvt = result.FirstOrDefault(e => e.GroupingKey.Equals(rawEvent.GroupingKey));
                if (sameGrpEvt != null)
                {
                    sameGrpEvt.Join(rawEvent, m_amountProcessor);
                    continue;
                }

                result.Add(rawEvent);
            }

            return(result);
        }
Esempio n. 2
0
        private BatchReportEntry MapEntry(DbDataReader row)
        {
            #region Column ordinals
            const int batchId               = 0;
            const int inventoryName         = 1;
            const int batchNumber           = 2;
            const int materialName          = 3;
            const int materialId            = 4;
            const int batchVolume           = 5;
            const int unit                  = 6;
            const int batchCreateDt         = 7;
            const int batchCloseDt          = 8;
            const int batchLockDt           = 9;
            const int batchAvailable        = 10;
            const int batchProductionDt     = 11;
            const int numberOfComponents    = 13;
            const int numberOfCompositions  = 14;
            const int numberOfOrders        = 16;
            const int price                 = 17;
            const int invoiceNr             = 18;
            const int numberOfStockEvents   = 19;
            const int numberOfSaleEvents    = 20;
            const int numberOfSegments      = 21;
            const int availableAmountValue  = 22;
            const int availableAmountUnitId = 23;
            #endregion

            var key = BatchKey.Parse(row.GetString(batchId));

            var entry = new BatchReportEntry(key)
            {
                InventoryName        = row.GetString(inventoryName),
                BatchNumber          = row.IsDBNull(batchNumber) ? "?" : row.GetString(batchNumber),
                MaterialName         = row.GetString(materialName),
                MaterialId           = row.GetInt32(materialId),
                CreateDt             = StringUtil.FormatDateTime(row.GetDateTime(batchCreateDt)),
                IsClosed             = !row.IsDBNull(batchCloseDt),
                IsLocked             = !row.IsDBNull(batchLockDt),
                IsAvailable          = row.GetBoolean(batchAvailable),
                NumberOfComponents   = row.GetInt32(numberOfComponents),
                NumberOfCompositions = row.GetInt32(numberOfCompositions),
                NumberOfOrders       = row.GetInt32(numberOfOrders),
                Price                 = row.IsDBNull(price) ? string.Empty : $"{StringUtil.FormatDecimal(row.GetDecimal(price))} CZK",
                InvoiceNumber         = row.IsDBNull(invoiceNr) ? string.Empty : string.Join(", ", row.GetString(invoiceNr).Split(';').Distinct()),
                HasStockEvents        = (!row.IsDBNull(numberOfStockEvents)) && (row.GetInt32(numberOfStockEvents) > 0),
                NumberOfSaleEvents    = row.GetInt32(numberOfSaleEvents),
                NumberOfSegments      = row.GetInt32(numberOfSegments),
                AvailableAmountValue  = row.GetDecimal(availableAmountValue),
                AvailableAmountUnitId = row.GetInt32(availableAmountUnitId),
                TotalAmountValue      = row.GetDecimal(batchVolume),
                TotalAmountUnitName   = row.GetString(unit)
            };

            return(entry);
        }
Esempio n. 3
0
        public BatchKey ToKey()
        {
            if (!string.IsNullOrWhiteSpace(BatchId))
            {
                return(BatchKey.Parse(BatchId));
            }

            if (string.IsNullOrWhiteSpace(BatchNumberQuery) || MaterialId == null)
            {
                throw new InvalidOperationException("Cannot complete batch key");
            }

            return(new BatchKey(MaterialId.Value, BatchNumberQuery));
        }
        public void CutOrderAllocation(string handle)
        {
            // "orderId|batchKey"
            var parts   = handle.Split('|');
            var orderId = int.Parse(parts[0]);

            if (parts.Length == 2)
            {
                var key = BatchKey.Parse(parts[1]);
                m_batchFacade.CutOrderAllocation(orderId, key);
            }
            else if (parts.Length == 1)
            {
                m_batchFacade.CutOrderAllocation(orderId, null);
            }
        }
Esempio n. 5
0
        public BatchReportModel QueryBatches(BatchReportQuery query)
        {
            if (query.LoadOrdersPage != null)
            {
                return(LoadOrders(query.ToKey(), query.LoadOrdersPage.Value));
            }
            else if (query.LoadSaleEventsPage != null)
            {
                return(LoadSaleEvents(query.ToKey(), query.LoadSaleEventsPage.Value));
            }
            else if (query.LoadSegmentsPage != null)
            {
                return(LoadSegments(query.ToKey(), query.LoadSegmentsPage.Value));
            }
            else if (query.LoadPriceComponentsPage != null)
            {
                return(LoadPriceComponents(query.ToKey(), query.LoadPriceComponentsPage.Value));
            }

            var pageSize   = query.HasKey ? 1 : c_pageSize;
            var pageNumber = query.HasKey ? 0 : query.PageNumber;

            IPurchaseOrder order = null;

            if (query.RelativeToOrderId != null)
            {
                order = m_orderRepository.GetOrder(query.RelativeToOrderId.Value);

                if (order == null)
                {
                    throw new InvalidOperationException("Invalid entity reference");
                }

                pageSize   = 1000;
                pageNumber = 0;
            }

            var sql = m_database.Sql().Call("LoadBatchesReport")
                      .WithParam("@projectId", m_session.Project.Id)
                      .WithParam("@pageSize", pageSize)
                      .WithParam("@pageNumber", pageNumber)
                      .WithParam("@batchId", query.HasKey ? query.ToKey().UnsafeToString() : null)
                      .WithParam("@materialId", query.MaterialId)
                      .WithParam("@orderNumber", ToProperNull(query.OrderNumber))
                      .WithParam("@batchNumber", ToProperNull(query.BatchNumberQuery?.Replace("*", "%")))
                      .WithParam("@dtFrom", query.From)
                      .WithParam("@dtTo", query.To)
                      .WithParam("@closed", query.ClosedBatches)
                      .WithParam("@locked", query.LockedBatches)
                      .WithParam("@inventoryTypeId", query.InventoryTypeId)
                      .WithParam("@onlyProduced", query.ProducedOnly)
                      .WithParam("@onlyBought", query.PurchasedOnly)
                      .WithParam("@compositionId", query.CompositionId)
                      .WithParam("@componentId", query.ComponentId)
                      .WithParam("@orderId", query.RelativeToOrderId)
                      .WithParam("@onlyBlocking", query.BlockedBatchesOnly)
                      .WithParam("@segmentId", query.SegmentId)
                      .WithParam("@invoiceNr", ToProperNull(query.InvoiceNr));

            var result = new BatchReportModel {
                Query = query
            };

            var rawEntries = sql.MapRows(MapEntry);

            result.Report.AddRange(rawEntries);
            result.CanLoadMore = (result.Report.Count == c_pageSize);

            foreach (var b in result.Report.OfType <BatchReportEntry>())
            {
                var material = m_materialRepository.GetMaterialById(b.MaterialId);

                if (b.IsClosed)
                {
                    b.AvailableAmount = "0";
                }
                else
                {
                    /*
                     * var available = m_batchFacade.GetAvailableAmount(b.BatchKey);
                     * b.AvailableAmount = $"{StringUtil.FormatDecimal(available.Value)} {available.Unit.Symbol}";
                     * b.Available = available;
                     */
                    var available = new Amount(b.AvailableAmountValue, m_unitRepository.GetUnit(b.AvailableAmountUnitId));

                    available         = m_amountProcessor.Convert(available, material.NominalUnit);
                    b.AvailableAmount = $"{StringUtil.FormatDecimal(available.Value)} {available.Unit.Symbol}";
                    b.Available       = available;
                }

                var totalUnit   = m_unitRepository.GetUnitBySymbol(b.TotalAmountUnitName);
                var totalAmount = new Amount(b.TotalAmountValue, totalUnit);
                totalAmount = m_amountProcessor.Convert(totalAmount, material.NominalUnit);

                b.BatchVolume = $"{StringUtil.FormatDecimal(totalAmount.Value)} {totalAmount.Unit.Symbol}";

                //b.NoDelReason = m_batchFacade.GetDeletionBlockReasons(b.BatchId).FirstOrDefault();
                b.CanDelete = !(b.HasStockEvents || b.NumberOfCompositions > 0 || b.NumberOfOrders > 0 || b.NumberOfSaleEvents > 0);

                if (b.HasStockEvents)
                {
                    PopulateStockEventCounts(b);
                }

                PopulateStockEventSuggestions(b);
            }

            if ((query.HasKey) && (result.Report.Count == 0))
            {
                result.Report.Add(new DeletedBatchReportEntry(query.ToKey()));
                return(result);
            }

            if (query.CompositionId != null)
            {
                PopulateComponentAmounts(BatchKey.Parse(query.CompositionId), result.Report);
                result.CustomField1Name = "Použito";
            }
            else if (query.ComponentId != null)
            {
                PopulateCompositionAmounts(BatchKey.Parse(query.ComponentId), result.Report);
                result.CustomField1Name = "Použito";
            }
            else if (query.RelativeToOrderId != null)
            {
                result.Report           = PopulateRelativeToOrder(order, result.Report);
                result.CustomField1Name = "Množství";
                result.CustomField3Name = "Položka";
                result.CustomField2Name = "Balil";
            }

            return(result);
        }
Esempio n. 6
0
        private List <BatchReportEntryBase> PopulateRelativeToOrder(IPurchaseOrder order, List <BatchReportEntryBase> batches)
        {
            var concreteItems = m_ordersFacade.GetAllConcreteOrderItems(order).ToList();
            var result        = new List <BatchReportEntryBase>(concreteItems.Count * 2);

            foreach (var orderItem in concreteItems)
            {
                var itemName = orderItem.KitParent?.PlacedName ?? orderItem.PlacedName;

                var assignedBatches = orderItem.AssignedBatches.ToList();
                if (!assignedBatches.Any())
                {
                    assignedBatches.Add(null);
                }

                foreach (var assignment in assignedBatches)
                {
                    var assignmentBatchKey = new BatchKey(assignment.MaterialBatchId);

                    var assignmentBatchMaterialId = assignmentBatchKey.GetMaterialId(m_batchFacade);
                    var assignmentBatchNumber     = assignmentBatchKey.GetBatchNumber(m_batchFacade);

                    var sourceRecord = batches.OfType <BatchReportEntry>().FirstOrDefault(b => b.MaterialId == assignmentBatchMaterialId && b.BatchNumber.Equals(assignmentBatchNumber, StringComparison.InvariantCultureIgnoreCase));

                    var user = assignment == null ? string.Empty : m_userRepository.GetUserNick(assignment.UserId);

                    var reportRow = new BatchReportEntry(BatchKey.Parse(sourceRecord.BatchId))
                    {
                        CustomField1         = StringUtil.FormatDecimal(assignment?.Quantity ?? orderItem.Quantity),
                        CustomField2         = user,
                        CustomField3         = itemName,
                        InventoryName        = sourceRecord?.InventoryName,
                        BatchNumber          = sourceRecord?.BatchNumber ?? string.Empty,
                        MaterialName         = sourceRecord?.MaterialName ?? string.Empty,
                        MaterialId           = sourceRecord?.MaterialId ?? -1,
                        BatchVolume          = sourceRecord?.BatchVolume ?? string.Empty,
                        AvailableAmount      = sourceRecord?.AvailableAmount ?? string.Empty,
                        CreateDt             = sourceRecord?.CreateDt ?? string.Empty,
                        IsClosed             = sourceRecord?.IsClosed ?? false,
                        IsLocked             = sourceRecord?.IsLocked ?? false,
                        IsAvailable          = sourceRecord?.IsAvailable ?? false,
                        NumberOfComponents   = sourceRecord?.NumberOfComponents ?? 0,
                        NumberOfCompositions = sourceRecord?.NumberOfCompositions ?? 0,
                        NumberOfOrders       = sourceRecord?.NumberOfOrders ?? 0,
                        Price              = sourceRecord?.Price ?? string.Empty,
                        InvoiceNumber      = sourceRecord?.InvoiceNumber ?? string.Empty,
                        NumberOfSaleEvents = sourceRecord?.NumberOfSaleEvents ?? 0,
                        NumberOfSegments   = sourceRecord?.NumberOfSegments ?? 0
                    };

                    result.Add(reportRow);
                }
            }

            result.Sort(
                new GenericComparer <BatchReportEntryBase>(
                    (a, b) =>
                    string.Compare((a as BatchReportEntry)?.CustomField2,
                                   (b as BatchReportEntry)?.CustomField2,
                                   StringComparison.Ordinal)));

            return(result);
        }
 public void DeleteBatch(string batchKey)
 {
     m_batchFacade.DeleteBatch(BatchKey.Parse(batchKey));
 }