Add date filter fields to BOM

This commit is contained in:
Rob H
2014-02-21 14:01:33 +11:00
parent 17456ebf2e
commit 5ec7a10e16
8 changed files with 95 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
orderManagementModule = angular.module("ofn.bulk_order_management", ["ofn.shared_services"])
orderManagementModule = angular.module("ofn.bulk_order_management", ["ofn.shared_services", "ofn.shared_directives"])
orderManagementModule.config [
"$httpProvider"
@@ -67,8 +67,13 @@ orderManagementModule.controller "AdminOrderMgmtCtrl", [
"$scope", "$http", "dataFetcher", "blankEnterprise", "pendingChanges"
($scope, $http, dataFetcher, blankEnterprise, pendingChanges) ->
now = new Date
start = new Date( now.getTime() - ( 7 * (1440 * 60 * 1000) ) - ( now.getTime() % ( 1440 * 60 * 1000 ) - now.getTimezoneOffset() * 60 * 1000 ) )
end = new Date( now.getTime() - ( now.getTime() % ( 1440 * 60 * 1000 ) - now.getTimezoneOffset() * 60 * 1000 ) + ( 1 * ( 1440 * 60 * 1000 ) ) )
$scope.lineItems = []
$scope.confirmDelete = true
$scope.startDate = formatDate start
$scope.endDate = formatDate end
$scope.pendingChanges = pendingChanges
$scope.initialise = (spree_api_key) ->
@@ -168,3 +173,17 @@ orderManagementModule.factory "switchClass", [
element.removeClass classToAdd
, timeout, true)
]
formatDate = (date) ->
year = date.getFullYear()
month = twoDigitNumber date.getMonth() + 1
day = twoDigitNumber date.getDate()
hours = twoDigitNumber date.getHours()
mins = twoDigitNumber date.getMinutes()
secs = twoDigitNumber date.getSeconds()
return year + "-" + month + "-" + day + " " + hours + ":" + mins + ":" + secs
twoDigitNumber = (number) ->
twoDigits = "" + number
twoDigits = ("0" + number) if number < 10
twoDigits

View File

@@ -1,4 +1,4 @@
productEditModule = angular.module("ofn.bulk_product_edit", ["ofn.shared_services"])
productEditModule = angular.module("ofn.bulk_product_edit", ["ofn.shared_services", "ofn.shared_directives"])
productEditModule.config [
"$httpProvider"
@@ -78,23 +78,6 @@ productEditModule.directive "ofnToggleColumn", ->
scope.column.visible = true
element.removeClass "unselected"
productEditModule.directive "datetimepicker", [
"$parse"
($parse) ->
return (
require: "ngModel"
link: (scope, element, attrs, ngModel) ->
element.datetimepicker
dateFormat: "yy-mm-dd"
timeFormat: "HH:mm:ss"
stepMinute: 15
onSelect: (dateText, inst) ->
scope.$apply (scope) ->
# Fires ngModel.$parsers
ngModel.$setViewValue dateText
)
]
productEditModule.controller "AdminProductEditCtrl", [
"$scope", "$timeout", "$http", "dataFetcher"

View File

@@ -0,0 +1,18 @@
sharedDirectivesModule = angular.module("ofn.shared_directives", [])
sharedDirectivesModule.directive "datetimepicker", [
"$parse"
($parse) ->
return (
require: "ngModel"
link: (scope, element, attrs, ngModel) ->
element.datetimepicker
dateFormat: "yy-mm-dd"
timeFormat: "HH:mm:ss"
stepMinute: 15
onSelect: (dateText, inst) ->
scope.$apply (scope) ->
# Fires ngModel.$parsers
ngModel.$setViewValue dateText
)
]

View File

@@ -1,4 +1,4 @@
.filter_select {
.filter_select, .date_filter {
margin-bottom: 10px;
}

View File

@@ -15,7 +15,18 @@
Hub
%br
%select.select2{ :class => "four columns alpha", :id => 'distributor_filter', 'ng-model' => 'distributorFilter', 'ng-options' => 'd.name for d in distributors'}
.spacer{ :class => "one column alpha" }
&nbsp;
.date_filters{ :class => "four columns alpha" }
.date_filter{ :class => "four columns alpha" }
Start Date
%br
%input{ :class => "four columns alpha", :type => "text", :id => 'start_date_filter', 'ng-model' => 'startDate', 'datetimepicker' => "startDate" }
.date_filter{ :class => "four columns alpha" }
End Date
%br
%input{ :class => "four columns alpha", :type => "text", :id => 'end_date_filter', 'ng-model' => 'endDate', 'datetimepicker' => "endDate" }
%hr{ :class => "sixteen columns alpha", :style => "margin-bottom: 15px" }
%table.index#listing_orders.bulk
%thead
%tr

View File

@@ -10,6 +10,7 @@ module.exports = function(config) {
'app/assets/javascripts/shared/angular-*.js',
'app/assets/javascripts/shared/jquery.timeago.js',
'app/assets/javascripts/admin/shared_directives.js.coffee',
'app/assets/javascripts/admin/shared_services.js.coffee',
'app/assets/javascripts/admin/order_cycle.js.erb.coffee',
'app/assets/javascripts/admin/bulk_order_management.js.coffee',

View File

@@ -203,6 +203,24 @@ feature %q{
end
end
context "using date restriction controls" do
let!(:o1) { FactoryGirl.create(:order, state: 'complete', completed_at: Time.now ) }
let!(:o2) { FactoryGirl.create(:order, state: 'complete', completed_at: Time.now ) }
let!(:li1) { FactoryGirl.create(:line_item, order: o1 ) }
let!(:li2) { FactoryGirl.create(:line_item, order: o2 ) }
before :each do
visit '/admin/orders/bulk_management'
end
it "displays date fields for filtering orders, with default values set" do
one_week_ago = (Date.today - 7).strftime("%F %T")
tonight = Date.tomorrow.strftime("%F %T")
page.should have_field "start_date_filter", with: one_week_ago
page.should have_field "end_date_filter", with: tonight
end
end
context "using action buttons" do
context "using delete buttons" do
let!(:o1) { FactoryGirl.create(:order, state: 'complete', completed_at: Time.now ) }

View File

@@ -371,4 +371,27 @@ describe "switchClass service", ->
it "sets up a new timeout if 'timeout' parameter is an integer", ->
switchClassService elementMock, "class1", ["class2"], 1000
expect(timeoutMock).toHaveBeenCalled()
expect(elementMock.timeout).toEqual "new timeout"
expect(elementMock.timeout).toEqual "new timeout"
describe "Auxiliary functions", ->
describe "getting a zero filled two digit number", ->
it "returns the number as a string if its value is greater than or equal to 10", ->
expect(twoDigitNumber(10)).toEqual "10"
expect(twoDigitNumber(15)).toEqual "15"
expect(twoDigitNumber(99)).toEqual "99"
it "returns the number formatted as a zero filled string if its value is less than 10", ->
expect(twoDigitNumber(0)).toEqual "00"
expect(twoDigitNumber(1)).toEqual "01"
expect(twoDigitNumber(9)).toEqual "09"
describe "formatting a date", ->
it "returns a date formatted as yyyy-mm-dd hh-MM:ss", ->
date = new Date
date.setYear(2010)
date.setMonth(5) # Zero indexed, so 5 is June
date.setDate(15)
date.setHours(5)
date.setMinutes(10)
date.setSeconds(30)
expect(formatDate(date)).toEqual "2010-06-15 05:10:30"