using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using NPOI.HSSF.Record; using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Media.Imaging; namespace PRSDesktop { public class JobRequisitionItemStockHoldingReserverGrid : DynamicDataGrid, ISpecificGrid { Guid ProductID = Guid.Empty; Guid JobID = Guid.Empty; String RequiNumber = ""; Guid RequiItemID = Guid.Empty; bool actionColumn = true; private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage(); private readonly BitmapImage changeNotAllowed = PRSDesktop.Resources.box.AsBitmapImage(); public bool StockReserved = false; public JobRequisitionItemStockHoldingReserverGrid(Guid productid, Guid jobid, Guid requiItemID, string requinumber, bool actioncolumn = true) { ProductID = productid; JobID = jobid; RequiNumber = requinumber; RequiItemID = requiItemID; Options.AddRange( DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns ); HiddenColumns.Add(x => x.ID); HiddenColumns.Add(x => x.Location.ID); HiddenColumns.Add(x => x.Product.ID); HiddenColumns.Add(x => x.Style.ID); HiddenColumns.Add(x => x.Job.ID); HiddenColumns.Add(x => x.Job.Deleted); HiddenColumns.Add(x => x.Dimensions.UnitSize); HiddenColumns.Add(x => x.Dimensions.Unit.ID); HiddenColumns.Add(x => x.Dimensions.Unit.Description); HiddenColumns.Add(x => x.Dimensions.Unit.HasHeight); HiddenColumns.Add(x => x.Dimensions.Unit.HasLength); HiddenColumns.Add(x => x.Dimensions.Unit.HasWidth); HiddenColumns.Add(x => x.Dimensions.Unit.HasHeight); HiddenColumns.Add(x => x.Dimensions.Unit.HasQuantity); HiddenColumns.Add(x => x.Dimensions.Unit.Format); HiddenColumns.Add(x => x.Dimensions.Unit.Formula); HiddenColumns.Add(x => x.Dimensions.Length); HiddenColumns.Add(x => x.Dimensions.Width); HiddenColumns.Add(x => x.Dimensions.Height); HiddenColumns.Add(x => x.Dimensions.Quantity); actionColumn = actioncolumn; if (actioncolumn) ActionColumns.Add(new DynamicImageColumn(ConfirmedImage, ReserveStock)); } protected override void GenerateColumns(DynamicGridColumns columns) { columns.Add(x => x.Location.Description, 110, "Location", "", Alignment.MiddleLeft); columns.Add(x => x.Product.Code, 70, "Product Code", "", Alignment.MiddleLeft); columns.Add(x => x.Product.Name, 150, "Product Name", "", Alignment.MiddleLeft); columns.Add(x => x.Job.JobNumber, 50, "Job", "", Alignment.MiddleLeft); columns.Add(x => x.Style.Description, 150, "Style", "", Alignment.MiddleLeft); columns.Add(x => x.Units, 50, "Units", "", Alignment.MiddleLeft); columns.Add(x => x.Dimensions.UnitSize, 60, "Size", "", Alignment.MiddleLeft); } private bool ReserveStock(CoreRow row) { StockHolding holding = row.ToObject(); //if (holding.Job.IsValid()) //{ // CoreTable table = new Client().Query(new Filter(x => x.Location.ID).IsEqualTo(holding.ID) // .And(x => x.JobRequisitionItem.ID).IsEqualTo(RequiItemID), // new Columns(x => x.ID)); // if (table.Rows.Any()) // { // var choiceresult = MessageBox.Show("This will reverse previous stock movements created to reserve from this location. Proceed?", "Alert", MessageBoxButton.YesNo); // switch (choiceresult) // { // case MessageBoxResult.Yes: // break; // case MessageBoxResult.No: // return false; // default: // return false; // } // List movements = new List(); // foreach (CoreRow stockmovementRow in table.Rows) // { // StockMovement movement = new StockMovement { ID = Guid.Parse(stockmovementRow.Values[0].ToString()) }; // movements.Add(movement); // } // new Client().Delete(movements, "Stock movements reversed from Job Requi Review Dashboard"); // return true; // } // else // { // MessageBox.Show("The stock movements for this holding cannot be reversed"); // return false; // } //} var result = MessageBox.Show("This will reserve stock from the holding now. Proceed?", "Alert", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: break; case MessageBoxResult.No: return false; default: return false; } int units = Convert.ToInt32(holding.Units); if (NumberEdit.Execute("Enter number to reserve", 1, units, ref units)) { StockMovementBatch batch = new StockMovementBatch(); batch.Type = StockMovementBatchType.Transfer; batch.Notes = "Reserving Stock for Requi: " + RequiNumber; new Client().Save(batch, "Created from Job Requi Item Reserve Stock Screen"); List movements = new List(); StockMovement issuemovement = new StockMovement(); issuemovement.System = true; issuemovement.Batch.Notes = batch.Notes; issuemovement.Batch.Type = StockMovementBatchType.Transfer; issuemovement.Units = units; issuemovement.Issued = units; issuemovement.Dimensions.CopyFrom(holding.Dimensions); issuemovement.Style.ID = holding.Style.ID; issuemovement.Location.ID = holding.Location.ID; issuemovement.Product.ID = holding.Product.ID; issuemovement.Date = batch.Created; issuemovement.IsTransfer = true; issuemovement.Notes = batch.Notes; issuemovement.JobRequisitionItem.ID = RequiItemID; issuemovement.Employee.ID = Guid.Parse(new Client().Query(new Filter(x => x.UserLink.UserID).IsEqualTo(ClientFactory.UserID), new Columns(x => x.ID)).Rows.FirstOrDefault().Values[0].ToString()); StockMovement receivemovement = new StockMovement(); receivemovement.Batch.Notes = batch.Notes; receivemovement.Batch.Type = StockMovementBatchType.Transfer; receivemovement.Units = units; receivemovement.Received = units; receivemovement.Dimensions.CopyFrom(holding.Dimensions); receivemovement.Style.ID = holding.Style.ID; receivemovement.Location.ID = holding.Location.ID; receivemovement.Product.ID = holding.Product.ID; receivemovement.Date = batch.Created; receivemovement.IsTransfer = true; receivemovement.Notes = batch.Notes; receivemovement.JobRequisitionItem.ID = RequiItemID; receivemovement.Employee.ID = Guid.Parse(new Client().Query(new Filter(x => x.UserLink.UserID).IsEqualTo(ClientFactory.UserID), new Columns(x => x.ID)).Rows.FirstOrDefault().Values[0].ToString()); receivemovement.Job.ID = JobID; movements.Add(issuemovement); movements.Add(receivemovement); new Client().Save(movements, "Items reserved from Job Requi Item Reserve Stock Screen"); StockReserved = true; } return true; } private BitmapImage ConfirmedImage(CoreRow row) { if (row == null) return tick; StockHolding holding = row.ToObject(); if (holding.Job.ID == JobID) { CoreTable table = new Client().Query(new Filter(x => x.Location.ID).IsEqualTo(holding.ID) .And(x => x.JobRequisitionItem.ID).IsEqualTo(RequiItemID), new Columns(x => x.ID)); if (table.Rows.Any()) { return tick; } else return changeNotAllowed; } else return null; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { criteria.Add(new Filter(x => x.Units).IsGreaterThan(0.0001)); criteria.Add(new Filter(x => x.Product.ID).IsEqualTo(ProductID)); criteria.Add(new Filter(x => x.Job).NotLinkValid().Or(x => x.Job).LinkValid(JobID)); base.Reload(criteria, columns, ref sort, action); } } }