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); }
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); }
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); } }
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); }
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)); }