private PurchaseReturnFilterModel ComposeSearch()
        {
            PurchaseReturnFilterModel model = new PurchaseReturnFilterModel();

            if (CustomerDropdown.SelectedIndex != -1)
            {
                model.CustomerId = (int)CustomerDropdown.SelectedValue;
            }

            if (!string.IsNullOrWhiteSpace(MemoTextbox.Text))
            {
                model.MemoNumber = MemoTextbox.Text.Trim();
            }

            if (!AllDateRB.Checked)
            {
                if (DateRangeRB.Checked)
                {
                    model.DateType = DateSearchType.DateRange;
                    model.DateFrom = DateFromPicker.Value;
                    model.DateTo   = DateToPicker.Value;
                }
            }
            else
            {
                model.DateType = DateSearchType.All;
            }

            if (!AllStatusRB.Checked)
            {
                if (UsedStatusRB.Checked)
                {
                    model.Status = ReturnStatusType.Used;
                }
                else
                {
                    model.Status = ReturnStatusType.Unused;
                }
            }
            else
            {
                model.Status = ReturnStatusType.All;
            }

            return(model);
        }
        private void LoadPurchaseReturn(PurchaseReturnFilterModel filter)
        {
            int  records     = 0;
            long elapsedTime = ClientHelper.PerformFetch(() =>
            {
                var results = this.purchaseReturnController.FetchPurchaseReturnWithSearch(filter);
                purchaseReturnDisplayModelBindingSource.DataSource = results;

                if (purchaseReturnDisplayModelBindingSource.Count == 0)
                {
                    purchaseReturnDetailModelBindingSource.DataSource = null;
                }

                records = results.Count;
            });

            ((MainForm)this.ParentForm).AttachStatus(records, elapsedTime);
        }
        void form_PurchaseReturnUpdated(object sender, EventArgs e)
        {
            PurchaseReturnFilterModel filter = ComposeSearch();

            LoadPurchaseReturn(filter);

            if (selectedId == 0)
            {
                purchaseReturnDisplayModelBindingSource.Position = purchaseReturnDisplayModelBindingSource.Count - 1;
            }
            else
            {
                PurchaseReturnDisplayModel item = ((SortableBindingList <PurchaseReturnDisplayModel>)purchaseReturnDisplayModelBindingSource.DataSource)
                                                  .FirstOrDefault(a => a.Id == selectedId);
                int index = purchaseReturnDisplayModelBindingSource.IndexOf(item);

                purchaseReturnDisplayModelBindingSource.Position = index;
                dataGridView1.Rows[index].Selected = true;
            }
        }
        public void RefreshView()
        {
            PurchaseReturnFilterModel filter = ComposeSearch();

            LoadPurchaseReturn(filter);
        }
        private void SearchButton_Click(object sender, EventArgs e)
        {
            PurchaseReturnFilterModel filter = ComposeSearch();

            LoadPurchaseReturn(filter);
        }
        public SortableBindingList <PurchaseReturnDisplayModel> FetchPurchaseReturnWithSearch(PurchaseReturnFilterModel filter)
        {
            try
            {
                var query = CreateQuery(filter);

                var result = from a in query
                             select new PurchaseReturnDisplayModel
                {
                    Id               = a.Id,
                    MemoNumber       = a.MemoNumber,
                    Customer         = a.Customer.CompanyName,
                    ReturnDate       = a.ReturnDate.Value,
                    AmountReturn     = a.AmountReturn.Value,
                    Adjustment       = a.Adjustment.Value,
                    TotalDebitAmount = a.TotalDebitAmount.Value,
                    Remarks          = a.Remarks,
                    RecordedBy       = a.RecordedByUser.Firstname + " " + a.RecordedByUser.Lastname,
                    AmountUsed       = a.AmountUsed.HasValue ? a.AmountUsed.Value : 0,
                    //ApprovedBy = a.ApprovedBy.HasValue ? a.ApprovedByUser.Firstname + " " + a.ApprovedByUser.Lastname : "-",
                    IsDeleted = a.IsDeleted.Value,
                };

                SortableBindingList <PurchaseReturnDisplayModel> b = new SortableBindingList <PurchaseReturnDisplayModel>(result);

                return(b);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private IQueryable <PurchaseReturn> CreateQuery(PurchaseReturnFilterModel filter)
        {
            var items = from i in db.PurchaseReturn
                        where i.IsDeleted == false
                        select i;

            if (filter != null)
            {
                if (filter.CustomerId != 0)
                {
                    items = items.Where(a => a.CustomerId == filter.CustomerId);
                }

                if (!string.IsNullOrWhiteSpace(filter.MemoNumber))
                {
                    items = items.Where(a => a.MemoNumber.Contains(filter.MemoNumber));
                }

                if (filter.AmountType != NumericSearchType.All)
                {
                    if (filter.AmountType == NumericSearchType.Equal)
                    {
                        items = items.Where(a => a.TotalDebitAmount == filter.AmountValue);
                    }
                    else if (filter.AmountType == NumericSearchType.GreaterThan)
                    {
                        items = items.Where(a => a.TotalDebitAmount > filter.AmountValue);
                    }
                    else if (filter.AmountType == NumericSearchType.LessThan)
                    {
                        items = items.Where(a => a.TotalDebitAmount < filter.AmountValue);
                    }
                }

                if (filter.DateType != DateSearchType.All)
                {
                    DateTime dateFrom = filter.DateFrom.Date;
                    DateTime dateTo   = filter.DateTo.AddDays(1).Date;

                    items = items.Where(a => a.ReturnDate >= dateFrom && a.ReturnDate < dateTo);
                }

                if (filter.Status != ReturnStatusType.All)
                {
                    if (filter.Status == ReturnStatusType.Used)
                    {
                        items = items.Where(a => a.IsUsed != null && a.IsUsed == true);
                    }
                    else
                    {
                        items = items.Where(a => a.IsUsed == null || a.IsUsed == false);
                    }
                }
            }
            else
            {
                //Default sorting
                items = items.OrderByDescending(a => a.ReturnDate);
            }

            return(items);
        }