async void LoadSerieBatch() { if (batchLoaded) { return; } SetBusy(); var lst = await api.Query <InvSerieBatch>(new InvSerieBatchOpen()); if (lst == null || lst.Length == 0) { ClearBusy(); return; } var mainList = (List <InvItemStorageCount>)dgInvStockStatus.ItemsSource; var search = new InvItemStorageCount(); var sort = new InvItemStorageLocalSort(); var cnt = mainList.Count; var extraItems = new List <InvItemStorageCount>(cnt); foreach (var rec in lst) { var itm = rec._Item; search._Item = itm; var idx = mainList.BinarySearch(search, sort); if (idx < 0) { idx = ~idx; } if (idx >= 0 && idx < cnt && mainList[idx]._Item == itm) { var r = new InvItemStorageCount(); var item = mainList[idx]; StreamingManager.Copy(item, r); r._SerieBatch = rec._Number; r._Qty = rec._Qty - rec._QtySold; r._QtyReserved = rec._QtyMarked; r._Warehouse = rec._Warehouse; r._Location = rec._Location; r._QtyOrdered = 0; r._Quantity = null; extraItems.Add(r); } } extraItems.AddRange(mainList); extraItems.Sort(sort); dgInvStockStatus.ItemsSource = extraItems; SerieBatch.Visible = true; batchLoaded = true; ClearBusy(); }
async void setLocation(InvWarehouse master, InvItemStorageCount rec) { if (api.CompanyEntity.Location) { if (master != null) { rec.locationSource = master.Locations ?? await master.LoadLocations(api); } else { rec.locationSource = null; rec.Location = null; } rec.NotifyPropertyChanged("LocationSource"); } }
static async void FindOnEANVariant(InvItemStorageCount rec, QueryAPI api) { var ap = new Uniconta.API.Inventory.ReportAPI(api); var variant = await ap.GetInvVariantDetail(rec._EAN); if (variant != null) { rec.Item = variant._Item; rec.Variant1 = variant._Variant1; rec.Variant2 = variant._Variant2; rec.Variant3 = variant._Variant3; rec.Variant4 = variant._Variant4; rec.Variant5 = variant._Variant5; rec._EAN = variant._EAN; } }
static public void FindOnEAN(InvItemStorageCount rec, SQLCache Items, QueryAPI api) { var EAN = rec._EAN; if (string.IsNullOrWhiteSpace(EAN)) { return; } var found = (from item in (InvItem[])Items.GetNotNullArray where string.Compare(item._EAN, EAN, StringComparison.CurrentCultureIgnoreCase) == 0 select item).FirstOrDefault(); if (found != null) { rec._EAN = found._EAN; rec.Item = found._Item; } else { FindOnEANVariant(rec, api); } }
List <InvItemStorageCount> AddVariants(List <InvItemStorageCount> mainList, InvStandardVariantCombi[] stds) { var itemSort = new InvItemVariantSort(); var stdSort = new InvStandardVariantCombiSort(); Array.Sort(stds, stdSort); var stdSearch = new InvStandardVariantCombi() { _LineNumber1 = float.MinValue, _LineNumber2 = float.MinValue, _LineNumber3 = float.MinValue, _LineNumber4 = float.MinValue, _LineNumber5 = float.MinValue }; var newItems = new List <InvItemStorageCount>(100); var itemSearch = new InvItemStorageCount(); string lastItem = null; foreach (var rec in mainList) { if (rec._Item == lastItem) { continue; } lastItem = rec._Item; var item = (InvItem)items.Get(lastItem); if (item?._StandardVariant == null || !item._UseVariants) { continue; } itemSearch._Item = lastItem; var stdVariant = item._StandardVariant; stdSearch._StandardVariant = stdVariant; var pos = Array.BinarySearch(stds, stdSearch, stdSort); if (pos < 0) { pos = ~pos; } while (pos < stds.Length) { var std = stds[pos++]; if (std._StandardVariant != stdVariant) { break; } itemSearch._Variant1 = std._Variant1; itemSearch._Variant2 = std._Variant2; itemSearch._Variant3 = std._Variant3; itemSearch._Variant4 = std._Variant4; itemSearch._Variant5 = std._Variant5; var itemPos = mainList.BinarySearch(itemSearch, itemSort); if (itemPos < 0) { itemPos = ~itemPos; } if (itemPos >= mainList.Count) { itemPos = mainList.Count - 1; } var found = mainList[itemPos]; if (found._Item != itemSearch._Item) // item is not in the list, or we are past item. { if (itemPos == 0) { continue; } found = mainList[itemPos - 1]; // we need to test one position before, since binarysearch will be past the item with blank variants if (found._Item != itemSearch._Item) // item is not in the list { continue; } } if (itemSort.Compare(found, itemSearch) == 0) // we have the variant combination { continue; } var newrec = new InvItemStorageCount(); newrec.SetMaster(item); newrec._Variant1 = std._Variant1; newrec._Variant2 = std._Variant2; newrec._Variant3 = std._Variant3; newrec._Variant4 = std._Variant4; newrec._Variant5 = std._Variant5; newrec._Warehouse = item._Warehouse; newrec._Location = item._Location; newItems.Add(newrec); } } if (newItems.Count > 0) { newItems.AddRange(mainList); return(newItems); } return(null); }
public async Task BindGrid(IEnumerable <PropValuePair> propValuePair) { await dgInvStockStatus.Filter(propValuePair); var mainList = (List <InvItemStorageCount>)dgInvStockStatus.ItemsSource; if (mainList == null) { return; } var search = new InvItemStorageCount(); var sort = new InvItemStorageLocalSort(); var cnt = mainList.Count; var api = this.api; if (this.items == null) { this.items = await api.LoadCache(typeof(Uniconta.DataModel.InvItem)); } if (propValuePair == null || propValuePair.Count() == 0) { var lst = new List <InvItemStorageCount>(cnt); foreach (var item in (Uniconta.DataModel.InvItem[]) this.items.GetNotNullArray) { if (item._ItemType == (byte)ItemType.Service) { continue; } var itm = item._Item; search._Item = itm; var idx = mainList.BinarySearch(search, sort); if (idx < 0) { idx = ~idx; } if (idx >= 0 && idx < cnt && mainList[idx]._Item == itm) { continue; } var r = new InvItemStorageCount(); r.SetMaster(item); lst.Add(r); } if (lst.Count > 0) { lst.AddRange(mainList); lst.Sort(sort); mainList = lst; } } if (api.CompanyEntity.ItemVariants && api.CompanyEntity._LoadVariantsInCounting) { var stds = await api.Query <InvStandardVariantCombi>(); var newList = AddVariants(mainList, stds); if (newList != null) { newList.Sort(sort); mainList = newList; } } dgInvStockStatus.ItemsSource = mainList; SerieBatch.Visible = false; batchLoaded = false; }