Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
ecommerce
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
ecommerce
Commits
0ef09d90
Commit
0ef09d90
authored
Feb 26, 2016
by
aamir-khan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ECOM-3661: Added the scripts to update the order data
parent
6f565edb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
144 additions
and
0 deletions
+144
-0
ecommerce/extensions/order/management/__init__.py
+0
-0
ecommerce/extensions/order/management/commands/__init__.py
+0
-0
ecommerce/extensions/order/management/commands/update_order.py
+56
-0
ecommerce/extensions/order/tests/test_update_order_command.py
+88
-0
No files found.
ecommerce/extensions/order/management/__init__.py
0 → 100644
View file @
0ef09d90
ecommerce/extensions/order/management/commands/__init__.py
0 → 100644
View file @
0ef09d90
ecommerce/extensions/order/management/commands/update_order.py
0 → 100644
View file @
0ef09d90
"""This scripts remove the data inconsistency of ECOM-3661."""
import
logging
from
django.core.management
import
BaseCommand
,
CommandError
from
django.db
import
transaction
from
oscar.core.loading
import
get_model
BasketLine
=
get_model
(
'basket'
,
'Line'
)
Order
=
get_model
(
'order'
,
'Order'
)
LinePrice
=
get_model
(
'order'
,
'LinePrice'
)
PaymentEventQuantity
=
get_model
(
'order'
,
'PaymentEventQuantity'
)
OrderNote
=
get_model
(
'order'
,
'OrderNote'
)
logger
=
logging
.
getLogger
(
__name__
)
ORDER_NUMBER
=
"EDX-5266181"
AMOUNT
=
49.0
class
Command
(
BaseCommand
):
help
=
'Update the order flagged in ECOM-3661.'
def
handle
(
self
,
*
args
,
**
options
):
logger
.
info
(
"Updating the order [
%
s] with new amount [
%
s]."
,
ORDER_NUMBER
,
AMOUNT
)
try
:
order
=
Order
.
objects
.
get
(
number
=
ORDER_NUMBER
)
except
Order
.
DoesNotExist
:
logger
.
error
(
"The order [
%
s] does not exist."
,
ORDER_NUMBER
)
raise
CommandError
(
"The order {} does not exist."
.
format
(
ORDER_NUMBER
))
with
transaction
.
atomic
():
order
.
total_incl_tax
=
AMOUNT
order
.
total_excl_tax
=
AMOUNT
order
.
save
()
order
.
lines
.
update
(
quantity
=
1
,
line_price_incl_tax
=
AMOUNT
,
line_price_excl_tax
=
AMOUNT
,
line_price_before_discounts_incl_tax
=
AMOUNT
,
line_price_before_discounts_excl_tax
=
AMOUNT
)
LinePrice
.
objects
.
filter
(
order
=
order
)
.
update
(
quantity
=
1
)
PaymentEventQuantity
.
objects
.
filter
(
line__in
=
order
.
lines
.
all
())
.
update
(
quantity
=
1
)
# Make sure it does not update the lines whom baskets were deleted.
if
order
.
basket
:
BasketLine
.
objects
.
filter
(
basket
=
order
.
basket
)
.
update
(
quantity
=
1
)
OrderNote
.
objects
.
create
(
order
=
order
,
message
=
"Flagged in Feb audit. The user was charged correctly for one seat on cybersource "
"but the order was created for two seats. This was due to some error in basket "
"creation. Updating the order amount to sync with the payments. "
"Issue detail in ECOM-3661."
)
logger
.
info
(
"The order
%
s updated successfully."
,
ORDER_NUMBER
)
ecommerce/extensions/order/tests/test_update_order_command.py
0 → 100644
View file @
0ef09d90
from
django.core.management
import
call_command
,
CommandError
from
oscar.core.loading
import
get_model
from
oscar.test
import
factories
from
ecommerce.tests.testcases
import
TestCase
BasketLine
=
get_model
(
'basket'
,
'Line'
)
Order
=
get_model
(
'order'
,
'Order'
)
LinePrice
=
get_model
(
'order'
,
'LinePrice'
)
PaymentEventQuantity
=
get_model
(
'order'
,
'PaymentEventQuantity'
)
OrderNote
=
get_model
(
'order'
,
'OrderNote'
)
LOGGER_NAME
=
'ecommerce.extensions.order.management.commands.update_order'
class
UpdateOrderCommandTests
(
TestCase
):
ORDER_NUMBER
=
"EDX-5266181"
AMOUNT
=
49.0
def
setUp
(
self
):
super
(
UpdateOrderCommandTests
,
self
)
.
setUp
()
self
.
correct_order
=
factories
.
create_order
()
self
.
affected_order
=
factories
.
create_order
(
number
=
self
.
ORDER_NUMBER
)
self
.
affected_order
.
total_incl_tax
=
98.0
self
.
affected_order
.
total_excl_tax
=
98.0
self
.
affected_order
.
save
()
LinePrice
.
objects
.
filter
(
order
=
self
.
affected_order
)
.
update
(
quantity
=
2
)
PaymentEventQuantity
.
objects
.
filter
(
line__in
=
self
.
affected_order
.
lines
.
all
())
.
update
(
quantity
=
2
)
BasketLine
.
objects
.
filter
(
basket
=
self
.
affected_order
.
basket
)
.
update
(
quantity
=
2
)
def
test_handle_invalid_order
(
self
):
"""Verify that the command raises exception if order_number is not valid."""
self
.
affected_order
.
delete
()
with
self
.
assertRaises
(
CommandError
):
call_command
(
'update_order'
)
def
test_handle
(
self
):
""" Verify the management command update the affected order."""
self
.
assertEqual
(
OrderNote
.
objects
.
filter
(
order
=
self
.
affected_order
)
.
count
(),
0
)
amount
=
49
call_command
(
'update_order'
)
affected_order
=
Order
.
objects
.
get
(
number
=
self
.
affected_order
.
number
)
correct_order
=
Order
.
objects
.
get
(
number
=
self
.
correct_order
.
number
)
# Verify that the command updated the prices of affected order.
self
.
assertEqual
(
affected_order
.
total_incl_tax
,
amount
)
self
.
assertEqual
(
affected_order
.
total_excl_tax
,
amount
)
# Verify that the command did not updated the prices of other order.
self
.
assertEqual
(
correct_order
.
total_incl_tax
,
self
.
correct_order
.
total_incl_tax
)
self
.
assertEqual
(
correct_order
.
total_excl_tax
,
self
.
correct_order
.
total_excl_tax
)
# Verify that the command updated the order lines.
for
line
in
affected_order
.
lines
.
all
():
self
.
assertEqual
(
line
.
quantity
,
1
)
self
.
assertEqual
(
line
.
line_price_incl_tax
,
amount
)
self
.
assertEqual
(
line
.
line_price_excl_tax
,
amount
)
self
.
assertEqual
(
line
.
line_price_before_discounts_excl_tax
,
amount
)
correct_order_line
=
correct_order
.
lines
.
all
()[
0
]
correct_line_before_update
=
self
.
correct_order
.
lines
.
all
()[
0
]
# Verify that the command did not updated the other order lines.
self
.
assertEqual
(
correct_order_line
.
quantity
,
correct_line_before_update
.
quantity
)
self
.
assertEqual
(
correct_order_line
.
line_price_incl_tax
,
correct_line_before_update
.
line_price_incl_tax
)
self
.
assertEqual
(
correct_order_line
.
line_price_excl_tax
,
correct_line_before_update
.
line_price_excl_tax
)
self
.
assertEqual
(
correct_order_line
.
line_price_before_discounts_excl_tax
,
correct_line_before_update
.
line_price_before_discounts_excl_tax
)
for
line_price
in
LinePrice
.
objects
.
filter
(
order
=
self
.
affected_order
)
.
all
():
self
.
assertEqual
(
line_price
.
quantity
,
1
)
self
.
assertEqual
(
OrderNote
.
objects
.
filter
(
order
=
self
.
affected_order
)
.
count
(),
1
)
for
basket_line
in
BasketLine
.
objects
.
filter
(
basket
=
self
.
affected_order
.
basket
)
.
all
():
self
.
assertEqual
(
basket_line
.
quantity
,
1
)
def
test_handle_order_without_basket
(
self
):
amount
=
49
basket_lines
=
BasketLine
.
objects
.
filter
(
basket
=
self
.
affected_order
.
basket
)
.
values
(
"id"
)
line_ids
=
[
line_id
[
"id"
]
for
line_id
in
basket_lines
]
self
.
affected_order
.
basket
=
None
self
.
affected_order
.
save
()
call_command
(
'update_order'
,
order_number
=
self
.
affected_order
.
number
,
amount
=
amount
)
basket_lines
=
BasketLine
.
objects
.
filter
(
id__in
=
line_ids
)
.
all
()
for
basket_line
in
basket_lines
:
self
.
assertEqual
(
basket_line
.
quantity
,
2
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment