This commit is contained in:
Le Deng
2017-03-11 09:36:22 -05:00
parent babfea5e47
commit 98dabce14f
11 changed files with 210 additions and 98 deletions

View File

@@ -19,8 +19,8 @@
<file leaf-file-name="CheckoutResource.java" pinned="false" current-in-tab="true"> <file leaf-file-name="CheckoutResource.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="333"> <state relative-caret-position="303">
<caret line="56" column="60" lean-forward="false" selection-start-line="56" selection-start-column="60" selection-end-line="56" selection-end-column="60" /> <caret line="89" column="0" lean-forward="true" selection-start-line="89" selection-start-column="0" selection-end-line="89" selection-end-column="0" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@@ -28,6 +28,36 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Order.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/Order.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="321">
<caret line="149" column="17" lean-forward="true" selection-start-line="149" selection-start-column="17" selection-end-line="149" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CartItem.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/CartItem.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-162">
<caret line="38" column="15" lean-forward="false" selection-start-line="38" selection-start-column="15" selection-end-line="38" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OrderServiceImpl.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/service/impl/OrderServiceImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="533">
<caret line="81" column="24" lean-forward="false" selection-start-line="81" selection-start-column="17" selection-end-line="81" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Payment.java" pinned="false" current-in-tab="false"> <file leaf-file-name="Payment.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/Payment.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/Payment.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
@@ -122,12 +152,12 @@
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/Book.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/Book.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/CartResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/CartResource.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/BookResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/BookResource.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/CartItem.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShoppingCartResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShoppingCartResource.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/Order.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShippingResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShippingResource.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/PaymentResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/PaymentResource.java" />
<option value="$PROJECT_DIR$/src/main/resources/templates/orderConfirmationEmailTemplate.html" /> <option value="$PROJECT_DIR$/src/main/resources/templates/orderConfirmationEmailTemplate.html" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/CartItem.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/domain/Order.java" />
<option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java" /> <option value="$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java" />
</list> </list>
</option> </option>
@@ -954,12 +984,12 @@
<workItem from="1488378219247" duration="650000" /> <workItem from="1488378219247" duration="650000" />
<workItem from="1488461561430" duration="18419000" /> <workItem from="1488461561430" duration="18419000" />
<workItem from="1488731165185" duration="30270000" /> <workItem from="1488731165185" duration="30270000" />
<workItem from="1489159532831" duration="8291000" /> <workItem from="1489159532831" duration="11257000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="100573000" /> <option name="totallyTimeSpent" value="103539000" />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="72" y="23" width="1280" height="797" extended-state="0" /> <frame x="72" y="23" width="1280" height="797" extended-state="0" />
@@ -1015,13 +1045,6 @@
<option name="FILTER_TARGETS" value="false" /> <option name="FILTER_TARGETS" value="false" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/service/impl/OrderServiceImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="193">
<caret line="43" column="27" lean-forward="false" selection-start-line="43" selection-start-column="27" selection-end-line="43" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/utility/USConstants.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/utility/USConstants.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
@@ -1377,14 +1400,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/CartItem.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="33" column="15" lean-forward="false" selection-start-line="33" selection-start-column="15" selection-end-line="33" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShippingResource.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/ShippingResource.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143"> <state relative-caret-position="143">
@@ -1437,14 +1452,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/Order.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="34" column="0" lean-forward="true" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/resources/templates/orderConfirmationEmailTemplate.html"> <entry file="file://$PROJECT_DIR$/src/main/resources/templates/orderConfirmationEmailTemplate.html">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1890"> <state relative-caret-position="1890">
@@ -1477,10 +1484,34 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/service/impl/OrderServiceImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="533">
<caret line="81" column="24" lean-forward="false" selection-start-line="81" selection-start-column="17" selection-end-line="81" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/CartItem.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-162">
<caret line="38" column="15" lean-forward="false" selection-start-line="38" selection-start-column="15" selection-end-line="38" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/domain/Order.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="321">
<caret line="149" column="17" lean-forward="true" selection-start-line="149" selection-start-column="17" selection-end-line="149" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/bookstore/resource/CheckoutResource.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="333"> <state relative-caret-position="303">
<caret line="56" column="60" lean-forward="false" selection-start-line="56" selection-start-column="60" selection-end-line="56" selection-end-column="60" /> <caret line="89" column="0" lean-forward="true" selection-start-line="89" selection-start-column="0" selection-end-line="89" selection-end-column="0" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>

View File

@@ -36,6 +36,7 @@ public class CartItem implements Serializable {
@ManyToOne @ManyToOne
@JoinColumn(name = "order_id") @JoinColumn(name = "order_id")
@JsonIgnore
private Order order; private Order order;
public Long getId() { public Long getId() {

View File

@@ -31,12 +31,15 @@ public class Order implements Serializable {
private List<CartItem> cartItemList; private List<CartItem> cartItemList;
@OneToOne(cascade=CascadeType.ALL) @OneToOne(cascade=CascadeType.ALL)
@JsonIgnore
private ShippingAddress shippingAddress; private ShippingAddress shippingAddress;
@OneToOne(cascade=CascadeType.ALL) @OneToOne(cascade=CascadeType.ALL)
@JsonIgnore
private BillingAddress billingAddress; private BillingAddress billingAddress;
@OneToOne(cascade=CascadeType.ALL) @OneToOne(cascade=CascadeType.ALL)
@JsonIgnore
private Payment payment; private Payment payment;
@ManyToOne @ManyToOne
@@ -130,4 +133,21 @@ public class Order implements Serializable {
public void setUser(User user) { public void setUser(User user) {
this.user = user; this.user = user;
} }
@Override
public String toString() {
return "Order{" +
"id=" + id +
", orderDate=" + orderDate +
", shippingDate=" + shippingDate +
", shippingMethod='" + shippingMethod + '\'' +
", orderStatus='" + orderStatus + '\'' +
", orderTotal=" + orderTotal +
", cartItemList=" + cartItemList +
", shippingAddress=" + shippingAddress +
", billingAddress=" + billingAddress +
", payment=" + payment +
", user=" + user +
'}';
}
} }

View File

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import java.security.Principal; import java.security.Principal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
/** /**
* Created by z00382545 on 3/10/17. * Created by z00382545 on 3/10/17.
@@ -24,6 +25,8 @@ import java.util.*;
@RequestMapping("/checkout") @RequestMapping("/checkout")
public class CheckoutResource { public class CheckoutResource {
private Order order = new Order();
@Autowired @Autowired
private JavaMailSender mailSender; private JavaMailSender mailSender;
@@ -43,7 +46,7 @@ public class CheckoutResource {
private MailConstructor mailConstructor; private MailConstructor mailConstructor;
@RequestMapping(value = "/checkout", method = RequestMethod.POST) @RequestMapping(value = "/checkout", method = RequestMethod.POST)
public ResponseEntity checkoutPost( public Order checkoutPost(
@RequestBody HashMap<String, Object> mapper, @RequestBody HashMap<String, Object> mapper,
Principal principal Principal principal
) { ) {
@@ -78,7 +81,11 @@ public class CheckoutResource {
estimatedDeliveryDate = today.plusDays(3); estimatedDeliveryDate = today.plusDays(3);
} }
return new ResponseEntity("Order Checkout Successful!", HttpStatus.OK); this.order = order;
return order;
} }
} }

View File

@@ -1,5 +1,9 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
import {AppConst} from '../../constants/app-const'; import {Params, ActivatedRoute,Router} from "@angular/router";
import { AppConst } from '../../constants/app-const';
import { CheckoutService } from '../../services/checkout.service';
import { Order } from '../../models/order';
import { CartItem } from '../../models/cart-item';
@Component({ @Component({
@@ -9,10 +13,39 @@ import {AppConst} from '../../constants/app-const';
}) })
export class OrderSummaryComponent implements OnInit { export class OrderSummaryComponent implements OnInit {
private serverPath = AppConst.serverPath; private serverPath = AppConst.serverPath;
private order:Order = new Order();
private estimatedDeliveryDate:string;
private cartItemList:CartItem[] = [];
constructor() { } constructor(
private checkoutService:CheckoutService,
private route: ActivatedRoute,
private router:Router
) {
this.route.queryParams.subscribe(params => {
this.order = JSON.parse(params['order']);
let deliveryDate = new Date();
if (this.order.shippingMethod=="groundShipping") {
deliveryDate.setDate(deliveryDate.getDate()+5);
} else {
deliveryDate.setDate(deliveryDate.getDate()+3);
}
let days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
this.estimatedDeliveryDate = days[deliveryDate.getDay()]+', '+deliveryDate.getFullYear()+'/'+deliveryDate.getMonth()+'/'+deliveryDate.getDate();
this.cartItemList = this.order.cartItemList;
});
}
ngOnInit() { ngOnInit() {
} }
} }

View File

@@ -1,7 +1,7 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import {AppConst} from '../../constants/app-const'; import {AppConst} from '../../constants/app-const';
import {Book} from '../../models/book'; import {Book} from '../../models/book';
import {Router} from "@angular/router"; import {Router, NavigationExtras} from "@angular/router";
import {CartService} from '../../services/cart.service'; import {CartService} from '../../services/cart.service';
import {ShippingService} from '../../services/shipping.service'; import {ShippingService} from '../../services/shipping.service';
import {PaymentService} from '../../services/payment.service'; import {PaymentService} from '../../services/payment.service';
@@ -14,7 +14,7 @@ import {UserPayment} from '../../models/user-payment';
import {UserBilling} from '../../models/user-billing'; import {UserBilling} from '../../models/user-billing';
import {UserShipping} from '../../models/user-shipping'; import {UserShipping} from '../../models/user-shipping';
import {Payment} from '../../models/payment'; import {Payment} from '../../models/payment';
import {Order} from '../../models/order';
@Component({ @Component({
selector: 'app-order', selector: 'app-order',
@@ -41,6 +41,7 @@ export class OrderComponent implements OnInit {
private emptyPaymentList: boolean = true; private emptyPaymentList: boolean = true;
private stateList: string[] = []; private stateList: string[] = [];
private shippingMethod:string; private shippingMethod:string;
private order:Order = new Order();
constructor( constructor(
private router:Router, private router:Router,
@@ -69,13 +70,13 @@ export class OrderComponent implements OnInit {
getCartItemList(){ getCartItemList(){
this.cartService.getCartItemList().subscribe( this.cartService.getCartItemList().subscribe(
res=>{ res=>{
this.cartItemList = res.json(); this.cartItemList = res.json();
this.cartItemNumber = this.cartItemList.length; this.cartItemNumber = this.cartItemList.length;
}, },
error=>{ error=>{
console.log(error.text()); console.log(error.text());
} }
); );
} }
@@ -110,58 +111,65 @@ export class OrderComponent implements OnInit {
console.log("same as shipping") console.log("same as shipping")
if(checked) { if(checked) {
this.billingAddress.billingAddressName = this.shippingAddress.shippingAddressName; this.billingAddress.billingAddressName = this.shippingAddress.shippingAddressName;
this.billingAddress.billingAddressStreet1 = this.shippingAddress.shippingAddressStreet1; this.billingAddress.billingAddressStreet1 = this.shippingAddress.shippingAddressStreet1;
this.billingAddress.billingAddressStreet2 = this.shippingAddress.shippingAddressStreet2; this.billingAddress.billingAddressStreet2 = this.shippingAddress.shippingAddressStreet2;
this.billingAddress.billingAddressCity = this.shippingAddress.shippingAddressCity; this.billingAddress.billingAddressCity = this.shippingAddress.shippingAddressCity;
this.billingAddress.billingAddressState = this.shippingAddress.shippingAddressState; this.billingAddress.billingAddressState = this.shippingAddress.shippingAddressState;
this.billingAddress.billingAddressCountry = this.shippingAddress.shippingAddressCountry; this.billingAddress.billingAddressCountry = this.shippingAddress.shippingAddressCountry;
this.billingAddress.billingAddressZipcode = this.shippingAddress.shippingAddressZipcode; this.billingAddress.billingAddressZipcode = this.shippingAddress.shippingAddressZipcode;
} else { } else {
this.billingAddress.billingAddressName = ""; this.billingAddress.billingAddressName = "";
this.billingAddress.billingAddressStreet1 = ""; this.billingAddress.billingAddressStreet1 = "";
this.billingAddress.billingAddressStreet2 = ""; this.billingAddress.billingAddressStreet2 = "";
this.billingAddress.billingAddressCity = ""; this.billingAddress.billingAddressCity = "";
this.billingAddress.billingAddressState = ""; this.billingAddress.billingAddressState = "";
this.billingAddress.billingAddressCountry = ""; this.billingAddress.billingAddressCountry = "";
this.billingAddress.billingAddressZipcode = ""; this.billingAddress.billingAddressZipcode = "";
} }
} }
onSubmit(){ onSubmit(){
this.checkoutService.checkout( this.checkoutService.checkout(
this.shippingAddress, this.shippingAddress,
this.billingAddress, this.billingAddress,
this.payment, this.payment,
this.shippingMethod this.shippingMethod
).subscribe( ).subscribe(
res=>{ res=>{
console.log(res.text()); this.order=res.json();
}, console.log(this.order);
error=>{
console.log(error.text());
}
);
this.router.navigate(['/orderSummary']); let navigationExtras: NavigationExtras = {
} queryParams: {
"order": JSON.stringify(this.order)
}
};
ngOnInit() { this.router.navigate(['/orderSummary'], navigationExtras);
this.getCartItemList(); },
error=>{
console.log(error.text());
}
);
}
this.cartService.getShoppingCart().subscribe( ngOnInit() {
res=>{ this.getCartItemList();
this.cartService.getShoppingCart().subscribe(
res=>{
console.log(res.json()); console.log(res.json());
this.shoppingCart=res.json(); this.shoppingCart=res.json();
}, },
error=>{ error=>{
console.log(error.text()); console.log(error.text());
} }
); );
this.shippingService.getUserShippingList().subscribe( this.shippingService.getUserShippingList().subscribe(
res=>{ res=>{
console.log(res.json()); console.log(res.json());
this.userShippingList=res.json(); this.userShippingList=res.json();
this.emptyShippingList = false; this.emptyShippingList = false;
@@ -169,10 +177,10 @@ export class OrderComponent implements OnInit {
error=>{ error=>{
console.log(error.text()); console.log(error.text());
} }
); );
this.paymentService.getUserPaymentList().subscribe( this.paymentService.getUserPaymentList().subscribe(
res=>{ res=>{
console.log(res.json()); console.log(res.json());
this.userPaymentList=res.json(); this.userPaymentList=res.json();
this.emptyPaymentList = false; this.emptyPaymentList = false;
@@ -180,20 +188,20 @@ export class OrderComponent implements OnInit {
error=>{ error=>{
console.log(error.text()); console.log(error.text());
} }
); );
for (let s in AppConst.usStates) { for (let s in AppConst.usStates) {
this.stateList.push(s); this.stateList.push(s);
}
this.payment.type="";
this.payment.expiryMonth="";
this.payment.expiryYear="";
this.billingAddress.billingAddressState="";
this.shippingAddress.shippingAddressState="";
this.shippingMethod="groundShipping";
} }
this.payment.type="";
this.payment.expiryMonth="";
this.payment.expiryYear="";
this.billingAddress.billingAddressState="";
this.shippingAddress.shippingAddressState="";
this.shippingMethod="groundShipping";
} }
}

View File

@@ -1,3 +1,5 @@
import {CartItem} from "./cart-item";
export class Order { export class Order {
public id:number; public id:number;
public orderDate: string; public orderDate: string;
@@ -5,4 +7,5 @@ export class Order {
public shippingMethod: string; public shippingMethod: string;
public orderStatus: string; public orderStatus: string;
public orderTotal: number; public orderTotal: number;
public cartItemList: CartItem[];
} }

View File

@@ -29,4 +29,13 @@ export class CheckoutService {
return this.http.post(url, order, {headers : tokenHeader}); return this.http.post(url, order, {headers : tokenHeader});
} }
getUserOrder() {
let url = AppConst.serverPath+"/checkout/getUserOrder";
let tokenHeader = new Headers ({
'x-auth-token' : localStorage.getItem("xAuthToken")
});
return this.http.get(url, {headers : tokenHeader});
}
} }