Here is my complete solution to add Payment Method filter :
1 ) Add The dropdown list for PaymentMethods : \NopCommerceStore\Administration\Modules\Orders.ascx
// Line 95
<tr>
<td class="adminTitle">
<nopCommerce:ToolTipLabel runat="server" ID="lblPaymentMethod" Text="<% $NopResources:Admin.OrderDetails.PaymentMethod %>"
ToolTip="<% $NopResources:Admin.OrderDetails.PaymentMethod.Tooltip %>" ToolTipImage="~/Administration/Common/ico-help.gif" />
</td>
<td class="adminData">
<asp:DropDownList ID="ddlPaymentMethod" runat="server" CssClass="adminInput">
</asp:DropDownList>
</td>
</tr>
2) Change GetOrders() and FillDropDowns() in this file \NopCommerceStore\Administration\Modules\Orders.ascx.cs
protected OrderCollection GetOrders()
{
DateTime? startDate = ctrlStartDatePicker.SelectedDate;
DateTime? endDate = ctrlEndDatePicker.SelectedDate;
if(startDate.HasValue)
{
startDate = DateTimeHelper.ConvertToUtcTime(startDate.Value, DateTimeHelper.CurrentTimeZone);
}
if(endDate.HasValue)
{
endDate = DateTimeHelper.ConvertToUtcTime(endDate.Value, DateTimeHelper.CurrentTimeZone).AddDays(1);
}
OrderStatusEnum? orderStatus = null;
int orderStatusId = int.Parse(ddlOrderStatus.SelectedItem.Value);
if (orderStatusId > 0)
orderStatus = (OrderStatusEnum)Enum.ToObject(typeof(OrderStatusEnum), orderStatusId);
PaymentStatusEnum? paymentStatus = null;
int paymentStatusId = int.Parse(ddlPaymentStatus.SelectedItem.Value);
if (paymentStatusId > 0)
paymentStatus = (PaymentStatusEnum)Enum.ToObject(typeof(PaymentStatusEnum), paymentStatusId);
ShippingStatusEnum? shippingStatus = null;
int shippingStatusId = int.Parse(ddlShippingStatus.SelectedItem.Value);
if (shippingStatusId > 0)
shippingStatus = (ShippingStatusEnum)Enum.ToObject(typeof(ShippingStatusEnum), shippingStatusId);
// START CHANGE
RecurringPaymentTypeEnum? paymentMethod = null;
int paymentMethodId = int.Parse(ddlPaymentMethod.SelectedItem.Value);
if (paymentMethodId > 0)
paymentMethod = (RecurringPaymentTypeEnum)Enum.ToObject(typeof(RecurringPaymentTypeEnum), paymentMethodId);
// END CHANGE
OrderCollection orders = OrderManager.SearchOrders(startDate, endDate, txtCustomerEmail.Text, orderStatus, paymentStatus, shippingStatus, paymentMethod);
return orders;
}
protected void FillDropDowns()
{
this.ddlOrderStatus.Items.Clear();
ListItem itemOrderStatus = new ListItem(GetLocaleResourceString("Admin.Common.All"), "0");
this.ddlOrderStatus.Items.Add(itemOrderStatus);
OrderStatusCollection orderStatuses = OrderManager.GetAllOrderStatuses();
foreach (OrderStatus orderStatus in orderStatuses)
{
ListItem item2 = new ListItem(OrderManager.GetOrderStatusName(orderStatus.OrderStatusId), orderStatus.OrderStatusId.ToString());
this.ddlOrderStatus.Items.Add(item2);
}
this.ddlPaymentStatus.Items.Clear();
ListItem itemPaymentStatus = new ListItem(GetLocaleResourceString("Admin.Common.All"), "0");
this.ddlPaymentStatus.Items.Add(itemPaymentStatus);
PaymentStatusCollection paymentStatuses = PaymentStatusManager.GetAllPaymentStatuses();
foreach (PaymentStatus paymentStatus in paymentStatuses)
{
ListItem item2 = new ListItem(PaymentStatusManager.GetPaymentStatusName(paymentStatus.PaymentStatusId), paymentStatus.PaymentStatusId.ToString());
this.ddlPaymentStatus.Items.Add(item2);
}
this.ddlShippingStatus.Items.Clear();
ListItem itemShippingStatus = new ListItem(GetLocaleResourceString("Admin.Common.All"), "0");
this.ddlShippingStatus.Items.Add(itemShippingStatus);
ShippingStatusCollection shippingStatuses = ShippingStatusManager.GetAllShippingStatuses();
foreach (ShippingStatus shippingStatus in shippingStatuses)
{
ListItem item2 = new ListItem(ShippingStatusManager.GetShippingStatusName(shippingStatus.ShippingStatusId), shippingStatus.ShippingStatusId.ToString());
this.ddlShippingStatus.Items.Add(item2);
}
//START CHANGE
this.ddlPaymentMethod.Items.Clear();
ListItem itemPaymentMethod = new ListItem (GetLocaleResourceString("Admin.Common.All"), "0");
this.ddlPaymentMethod.Items.Add(itemPaymentMethod);
PaymentMethodCollection PaymentMethods = PaymentMethodManager.GetAllPaymentMethods();
foreach (PaymentMethod PaymentMethod in PaymentMethods)
{
if (PaymentMethod.IsActive)
{
ListItem item2 = new ListItem(PaymentMethod.Name, PaymentMethod.PaymentMethodId.ToString());
this.ddlPaymentMethod.Items.Add(item2);
}
}
//----- END CHANGE
}
3) Change SearchOrder : \Libraries\Nop.BusinessLogic\Orders\OrderManager.cs
/// Search orders
/// </summary>
/// <param name="startTime">Order start time; null to load all orders</param>
/// <param name="endTime">Order end time; null to load all orders</param>
/// <param name="customerEmail">Customer email</param>
/// <param name="os">Order status; null to load all orders</param>
/// <param name="ps">Order payment status; null to load all orders</param>
/// <param name="ss">Order shippment status; null to load all orders</param>
/// <param name="pt">Order Payment method null to load all orders</param>
/// <returns>Order collection</returns>
public static OrderCollection SearchOrders(DateTime? startTime, DateTime? endTime,
string customerEmail, OrderStatusEnum? os, PaymentStatusEnum? ps,
ShippingStatusEnum? ss, RecurringPaymentTypeEnum? pt)
{
int? orderStatusId = null;
if (os.HasValue)
orderStatusId = (int)os.Value;
int? paymentStatusId = null;
if (ps.HasValue)
paymentStatusId = (int)ps.Value;
int? shippingStatusId = null;
if (ss.HasValue)
shippingStatusId = (int)ss.Value;
int? paymentMethod = null;
if (pt.HasValue)
paymentMethod = (int)pt.Value;
var dbCollection = DBProviderManager<DBOrderProvider>.Provider.SearchOrders(startTime,
endTime, customerEmail, orderStatusId, paymentStatusId, shippingStatusId, paymentMethod);
var orders = DBMapping(dbCollection);
return orders;
}
4) Change SearchOrders \Application\Libraries\Nop.DataAccess\Orders\DBOrderProvider.cs
/// Search orders
/// </summary>
/// <param name="startTime">Order start time; null to load all orders</param>
/// <param name="endTime">Order end time; null to load all orders</param>
/// <param name="customerEmail">Customer email</param>
/// <param name="orderStatusId">Order status identifier; null to load all orders</param>
/// <param name="paymentStatusId">Order payment status identifier; null to load all orders</param>
/// <param name="shippingStatusId">Order shipping status identifier; null to load all orders</param>
/// <param name="paymentMethod">Order payment method; null to load all orders</param>
/// <returns>Order collection</returns>
public abstract DBOrderCollection SearchOrders(DateTime? startTime,
DateTime? endTime, string customerEmail, int? orderStatusId,
int? paymentStatusId, int? shippingStatusId, int? paymentMethod);
5) Change Nop_OrderSearch database SP :
/****** Object: StoredProcedure [dbo].[Nop_OrderSearch] Script Date: 08/09/2010 15:17:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Nop_OrderSearch]
(
@StartTime datetime = NULL,
@EndTime datetime = NULL,
@CustomerEmail nvarchar(255) = NULL,
@OrderStatusID int,
@PaymentStatusID int,
@ShippingStatusID int,
@PaymentMethodID int
)
AS
BEGIN
SET NOCOUNT ON
SELECT
o.*
FROM [Nop_Order] o
LEFT OUTER JOIN [Nop_Customer] c ON o.CustomerID = c.CustomerID
WHERE
(@CustomerEmail IS NULL or LEN(@CustomerEmail)=0 or (c.Email like '%' + COALESCE(@CustomerEmail,c.Email) + '%')) and
(@StartTime is NULL or @StartTime <= o.CreatedOn) and
(@EndTime is NULL or @EndTime >= o.CreatedOn) and
(@OrderStatusID IS NULL or @OrderStatusID=0 or o.OrderStatusID = @OrderStatusID) and
(@PaymentStatusID IS NULL or @PaymentStatusID=0 or o.PaymentStatusID = @PaymentStatusID) and
(@ShippingStatusID IS NULL OR @ShippingStatusID = 0 OR o.ShippingStatusID = @ShippingStatusID) and
(@PaymentMethodID IS NULL OR @PaymentMethodID = 0 OR o.PaymentMethodID = @PaymentMethodID) and
(o.Deleted=0)
ORDER BY o.CreatedOn desc
END