using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Windows.Controls;
using BF.SilverlightClient.DownloadServiceReference;
using BF.SilverlightClient.Library;
using BF.SilverlightClient.ViewModels;
using BF.SilverlightClient.Views.UploadAndDownload;
using BF.SilverlightClient.Views.ScsSkuViews;
using IdeaBlade.EntityModel;
namespace BF.SilverlightClient.Views.Reports
using FilterOperator = BF.SilverlightClient.DownloadServiceReference.FilterOperator;
public partial class DetailedReportView : UserControl
void UpdateWipTooltips(ScsViewModelForCollection currentScs)
if (currentScs == null) return;
var column = GlobalSubs.FindGridViewColumnByUniqueName(DetailedReportGrid.Columns, "WIPb");
var txtBlock = new TextBlock() { Text = "WIPb" };
var tt = new ToolTip() { Style = (Style)Application.Current.Resources["toolTipStyle"]};
if (Session.Person.SNET.Snet_Mgr_ExclusiveControl == false)
tt.Content = Tooltips.GetTooltip("TtWipB");
@ToolTipService.SetToolTip(txtBlock, tt);
tt.Content = Tooltips.GetTooltip("TtWipBdep");
if (ScsCollectionViewModel.Instance.CurrentSCS.IsDependentSupplier)
@ToolTipService.SetToolTip(txtBlock, tt);
tt.Content = "Work in Process B - already ordered before asking supplier";
@ToolTipService.SetToolTip(txtBlock,tt);
if (Session.Person.SNET.Snet_Mgr_ExclusiveControl == false)
tt.Content = Tooltips.GetTooltip("TtWipA");
@ToolTipService.SetToolTip(txtBlock,tt);
tt.Content = Tooltips.GetTooltip("TtWipAdep");
@ToolTipService.SetToolTip(txtBlock, tt);
@column.Header = txtBlock;
private readonly UserPreferencesKey _userPreferencesKeyForSelectedFields;
readonly private UserPreferencesKey _userPreferencesKeyForFiltering;
public DetailedReportView(UserPreferencesKey userPreferencesKeyForSelectedFields, UserPreferencesKey userPreferencesKeyForFiltering)
_userPreferencesKeyForFiltering = userPreferencesKeyForFiltering;
_userPreferencesKeyForSelectedFields = userPreferencesKeyForSelectedFields;
Resources.Add("ScsCollection", ScsCollectionViewModel.Instance);
ScsCollectionViewModel.Instance.CurrentScsChanged += UpdateWipTooltips;
DetailedReportGrid.DataLoaded += (s, e) =>
GlobalSubs.ReorderScsSkuFieldsAndSetVisibility(DetailedReportGrid, userPreferencesKeyForSelectedFields);
TitleTextBlock.Text = string.Format("{2} report for {0} {1}",
ScsCollectionViewModel.Instance.CurrentSCS.Model.VirtualSCS_ID !=null ? "(Virtual)" : "",
ScsCollectionViewModel.Instance.CurrentSCS.Model.VirtualSCS_ID !=null
? ScsCollectionViewModel.Instance.CurrentSCS.Model.VirtualSCSname :
String.Format("{0} (ID: {1})", ScsCollectionViewModel.Instance.CurrentSCS.Model.Name, ScsCollectionViewModel.Instance.CurrentSCS.Model.SCS_ID)
, userPreferencesKeyForSelectedFields == UserPreferencesKey.FieldsForDetailedReport ? "Detailed" : "Short"
TitleTextBlock2.Text = ScsCollectionViewModel.Instance.CurrentSCS.UsesForecastArrivalInBalance ? "Values in DueIn column ignored - DueIns by date merged with forecast" : "";
var req1FamColumn = GlobalSubs.FindGridViewColumnByUniqueName(DetailedReportGrid.Columns, "REQ1Fam");
req1FamColumn.IsVisible = req1FamColumn.IsVisible && ScsCollectionViewModel.Instance.PgcBalanceEnabledForAtLeast1Scs;
var req2FamColumn = GlobalSubs.FindGridViewColumnByUniqueName(DetailedReportGrid.Columns, "REQ2Fam");
req2FamColumn.IsVisible = req2FamColumn.IsVisible && ScsCollectionViewModel.Instance.PgcBalanceEnabledForAtLeast1Scs;
var fam1QColumn = GlobalSubs.FindGridViewColumnByUniqueName(DetailedReportGrid.Columns, "1FAMq");
fam1QColumn.IsVisible = fam1QColumn.IsVisible && ScsCollectionViewModel.Instance.PgcBalanceEnabledForAtLeast1Scs;
var fam2QColumn = GlobalSubs.FindGridViewColumnByUniqueName(DetailedReportGrid.Columns, "2FAMq");
fam2QColumn.IsVisible = fam2QColumn.IsVisible && ScsCollectionViewModel.Instance.PgcBalanceEnabledForAtLeast1Scs;
InitializePagerAndLoadData();
ScsCollectionViewModel.Instance.CurrentScsChanged += OnCurrentScsChanged;
Unloaded += (sender, args) => { ScsCollectionViewModel.Instance.CurrentScsChanged -= OnCurrentScsChanged; };
pager.DataLoaded += PagerOnDataLoaded;
private void PagerOnDataLoaded(List<object> objects)
foreach (var record in objects.Cast<vScsSkuForDetailedReport>())
if (record.WasBalanced != false) continue;
record.Allocation = null;
record.AverageDailyDemand = null;
record.AvgForecastInScso = null;
record.BatchIncrementQty = null;
record.BatchIncrementQty = null;
record.UnconstrainedRelease = null;
record.ConstrainedRelease = null;
record.ConstrainedRelease_Add = null;
record.ConstrainedRelease_Add2 = null;
record.ConstrainedRelease_AfterSatisfyingDosObj = null;
record.CustomField1SpecificToScs = null;
record.CustomField2SpecificToScs = null;
record.RequiredCapacityRCAP = null;
record.LowestBatchQty = null;
record.OnHandActual = null;
record.OnHandVirtualDOS_Begin = null;
record.OnHandVirtualDOSep = null;
record.PurchaseOrder = null;
record.TargetInventoryQuantity = null;
record.SCS_ProcGroup_Name = null;
record.SCS_ProcGroup2_Name = null;
record.SKU_NameUsedBySCS = "(not balanced) " + record.SKU_NameUsedBySCS;
private void OnCurrentScsChanged(ScsViewModelForCollection scsViewModelForCollection)
InitializePagerAndLoadData();
void InitializePagerAndLoadData()
if (ScsCollectionViewModel.Instance.CurrentSCS == null) return;
var optionalFilterAndSortingConfig =
SettingsManager.RetrieveObjectFromDatabase<FilterAndSortingConfigForDownloading>(_userPreferencesKeyForFiltering);
IEntityQuery<vScsSkuForDetailedReport> query =
ApplicationManager.BFEntities.vScsSkuForDetailedReportsOfCurrentScs;
if (includeInactiveCheckbox.IsChecked != true)
query = query.Where(x => x.WasBalanced == true && x.ActiveYN == true);
if (optionalFilterAndSortingConfig != null)
query = ApplyFilterForReportData(optionalFilterAndSortingConfig, query);
var desc = optionalFilterAndSortingConfig.Description;
FilterIsSetIndicator.Visibility = desc != null
if (desc != null) FilterIsSetIndicator.SetValue(ToolTipService.ToolTipProperty, desc);
FilterIsSetIndicator.Visibility = Visibility.Collapsed;
ISortSelector sortSelector = new SortSelector(
(optionalFilterAndSortingConfig != null && !String.IsNullOrEmpty(optionalFilterAndSortingConfig.ColumnNameForSorting)) ?
GetFieldNameForSorting(optionalFilterAndSortingConfig.ColumnNameForSorting) : "OnHandVirtualDOS_Begin",
optionalFilterAndSortingConfig != null ?
(optionalFilterAndSortingConfig.SortingDirectionAscendingOrDescending ? ListSortDirection.Ascending : ListSortDirection.Descending)
: ListSortDirection.Ascending
sortSelector = sortSelector.ThenBy("SKU_NAME");
sortSelector = sortSelector.ThenBy("BalanceSequence");
pager.InitializeAndLoadData((EntityQuery)query, sortSelector, "SKU_NameUsedBySCS");
private IEntityQuery<vScsSkuForDetailedReport> ApplyFilterForReportData(FilterAndSortingConfigForDownloading filteringAndSortingConfig,
IEntityQuery<vScsSkuForDetailedReport> dataRecs)
if (filteringAndSortingConfig != null)
foreach (var columnNameAndValue in filteringAndSortingConfig.ColumnsAndValuesForFiltering)
if (columnNameAndValue.FilterOperator == FilterOperator.NoFilter) continue;
var val = columnNameAndValue.Value;
int intVal; int.TryParse(val, out intVal);
float floatVal; float.TryParse(val, out floatVal);
decimal decimalVal; decimal.TryParse(val, out decimalVal);
switch (columnNameAndValue.ColumnName)
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS == val);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS == val);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS.CompareTo(val) >= 0);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS.CompareTo(val) < 0);
case FilterOperator.StartsWith:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS.StartsWith(val));
case FilterOperator.EndsWith:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS.EndsWith(val));
case FilterOperator.Contains:
dataRecs = dataRecs.Where(x => x.SKU_NameUsedBySCS.Contains(val));
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.Opt == val);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.Opt == val);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.Opt.CompareTo(val) > 0);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.Opt.CompareTo(val) < 0);
case FilterOperator.StartsWith:
dataRecs = dataRecs.Where(x => x.Opt.StartsWith(val));
case FilterOperator.EndsWith:
dataRecs = dataRecs.Where(x => x.Opt.EndsWith(val));
case FilterOperator.Contains:
dataRecs = dataRecs.Where(x => x.Opt.Contains(val));
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name == val);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name == val);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name.CompareTo(val) > 0);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name.CompareTo(val) < 0);
case FilterOperator.StartsWith:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name.StartsWith(val));
case FilterOperator.EndsWith:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name.EndsWith(val));
case FilterOperator.Contains:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup_Name.Contains(val));
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name == val);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name == val);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name.CompareTo(val) > 0);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name.CompareTo(val) < 0);
case FilterOperator.StartsWith:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name.StartsWith(val));
case FilterOperator.EndsWith:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name.EndsWith(val));
case FilterOperator.Contains:
dataRecs = dataRecs.Where(x => x.SCS_ProcGroup2_Name.Contains(val));
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.REQtot == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.REQtot != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.REQtot > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.REQtot < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_AfterSatisfyingDosObj == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_AfterSatisfyingDosObj != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_AfterSatisfyingDosObj > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_AfterSatisfyingDosObj < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add2 == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add2 != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add2 > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.ConstrainedRelease_Add2 < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.RequiredCapacityRCAP == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.RequiredCapacityRCAP != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.RequiredCapacityRCAP > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.RequiredCapacityRCAP < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.LowestBatchQty == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.LowestBatchQty != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.LowestBatchQty > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.LowestBatchQty < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.BatchIncrementQty == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.BatchIncrementQty != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.BatchIncrementQty > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.BatchIncrementQty < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.EndOfDistribution == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.EndOfDistribution != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.EndOfDistribution > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.EndOfDistribution < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.TargetInventoryQuantity == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.TargetInventoryQuantity != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.TargetInventoryQuantity > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.TargetInventoryQuantity < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.Short == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.Short != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.Short > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.Short < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.UnconstrainedRelease == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.UnconstrainedRelease != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.UnconstrainedRelease > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.UnconstrainedRelease < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOS_Begin == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOS_Begin != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOS_Begin > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOS_Begin < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOSep == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOSep != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOSep > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.OnHandVirtualDOSep < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.PurchaseOrder == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.PurchaseOrder != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.PurchaseOrder > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.PurchaseOrder < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.WorkInProcessB == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.WorkInProcessB != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.WorkInProcessB > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.WorkInProcessB < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.WorkInProcessA == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.WorkInProcessA != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.WorkInProcessA > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.WorkInProcessA < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandActual == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.OnHandActual != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.OnHandActual > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.OnHandActual < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.Allocation == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.Allocation != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.Allocation > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.Allocation < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.NTBdos == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.NTBdos != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.NTBdos > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.NTBdos < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.AverageDailyDemand == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.AverageDailyDemand != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.AverageDailyDemand > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.AverageDailyDemand < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.AvgForecastInScso == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.AvgForecastInScso != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.AvgForecastInScso > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.AvgForecastInScso < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
dataRecs = dataRecs.Where(x => x.Cost == eq);
case FilterOperator.IsNotEqualTo:
dataRecs = dataRecs.Where(x => x.Cost != ne);
case FilterOperator.GreaterThan:
dataRecs = dataRecs.Where(x => x.Cost > gt);
case FilterOperator.LessThan:
dataRecs = dataRecs.Where(x => x.Cost < lt);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
var eq = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField1SpecificToScs == eq);
case FilterOperator.IsNotEqualTo:
var ne = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField1SpecificToScs != ne);
case FilterOperator.GreaterThan:
var gt = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField1SpecificToScs.CompareTo(gt) > 0);
case FilterOperator.LessThan:
var lt = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField1SpecificToScs.CompareTo(lt) < 0);
switch (columnNameAndValue.FilterOperator)
case FilterOperator.IsEqualTo:
var eq = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField2SpecificToScs == eq);
case FilterOperator.IsNotEqualTo:
var ne = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField2SpecificToScs != ne);
case FilterOperator.GreaterThan:
var gt = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField2SpecificToScs.CompareTo(gt) > 0);
case FilterOperator.LessThan:
var lt = val.ToString(CultureInfo.InvariantCulture);
dataRecs = dataRecs.Where(x => x.CustomField2SpecificToScs.CompareTo(lt) < 0);
throw new Exception("bad column name " + columnNameAndValue.ColumnName);
if (filteringAndSortingConfig.ScsIdsAndPgcIdsForFiltering != null)
foreach (var scsIdAndPgcId in filteringAndSortingConfig.ScsIdsAndPgcIdsForFiltering)
if (scsIdAndPgcId.PgcIds != null && scsIdAndPgcId.PgcIds.Count != 0)
var pgcIds = scsIdAndPgcId.PgcIds.Select(x => (int?)x).ToList();
var scsId = (int?)scsIdAndPgcId.ScsId;
dataRecs = dataRecs.Where
(x.SCS_ID == scsId && pgcIds.Contains(x.SCS_ProcGroup_ID)) ||
if (scsIdAndPgcId.Pgc2Ids != null && scsIdAndPgcId.Pgc2Ids.Count != 0)
var pgc2Ids = scsIdAndPgcId.Pgc2Ids.Select(x => (int?)x).ToList();
var scsId = (int?)scsIdAndPgcId.ScsId;
dataRecs = dataRecs.Where
(x.SCS_ID == scsId && pgc2Ids.Contains(x.SCS_ProcGroup2_ID)) ||
string GetFieldNameForSorting(string fieldNameInGui)
return "SKU_NameUsedBySCS";
return "ConstrainedRelease";
return "ConstrainedRelease_AfterSatisfyingDosObj";
return "SCS_ProcGroup_Name";
return "SCS_ProcGroup2_Name";
return "RequiredCapacityRCAP";
return "BatchIncrementQty";
return "EndOfDistribution";
return "TargetInventoryQuantity";
return "UnconstrainedRelease";
return "OnHandVirtualDOS_Begin";
return "OnHandVirtualDOSep";
return "AverageDailyDemand";
return "AvgForecastInScso";
throw new Exception(String.Format("invalid column name for sorting: '{0}'", fieldNameInGui));
private void NameHyperlinkButtonClick(object sender, RoutedEventArgs e)
var button = (HyperlinkButton)sender;
var viewRecord = (vScsSkuForDetailedReport)button.DataContext;
var wnd = new ScsSkuCoverageOfForecastWindow(viewRecord.SCS_SKU_ID, ScsCollectionViewModel.Instance.CurrentSCS);
private void SelectFieldsButtonClick(object sender, RoutedEventArgs e)
var wnd = new ScsSkuDragDropSelectFieldsWindow(_userPreferencesKeyForSelectedFields,
ReorderFieldsAndSetVisibility);
private void ReorderFieldsAndSetVisibility()
GlobalSubs.ReorderScsSkuFieldsAndSetVisibility(DetailedReportGrid, _userPreferencesKeyForSelectedFields);
private void SortFilterDetailedFieldsButtonClick(object sender, RoutedEventArgs e)
var wnd = new FilterAndSortingConfigWindow(_userPreferencesKeyForFiltering, true);
wnd.Closed += (s2, e2) => InitializePagerAndLoadData();
private void IncludeInactiveCheckbox_OnChecked(object sender, RoutedEventArgs e)
InitializePagerAndLoadData();