package controllers;
import controllers.actions.FormHandler;
import controllers.actions.Authorization;
import forms.addressForm.*;
import forms.customerForm.UpdateCustomer;
import forms.passwordForm.UpdatePassword;
import io.sphere.client.shop.model.CustomerUpdate;
import io.sphere.client.shop.model.Order;
import play.data.Form;
import play.mvc.Content;
import play.mvc.Result;
import play.mvc.With;
import sphere.ShopController;
import views.html.customers;
import java.util.List;
import static play.data.Form.form;
import static utils.ControllerHelper.*;
@With(Authorization.class)
public class Addresses extends ShopController {
final static Form<UpdateCustomer> updateCustomerForm = form(UpdateCustomer.class);
final static Form<UpdatePassword> updatePasswordForm = form(UpdatePassword.class);
final static Form<AddAddress> addAddressForm = form(AddAddress.class);
final static Form<UpdateAddress> updateAddressForm = form(UpdateAddress.class);
final static Form<RemoveAddress> removeAddressForm = form(RemoveAddress.class);
public static Result get(String id) {
return ok(ListAddress.getJson(getCurrentCustomer().getAddressById(id)));
}
public static Result getList() {
return ok(ListAddress.getJson(getCurrentCustomer().getAddresses()));
}
@With(FormHandler.class)
public static Result add() {
// Case missing or invalid form data
Form<AddAddress> form = addAddressForm.bindFromRequest();
if (form.hasErrors()) {
displayErrors("set-address", form);
return badRequest(showPage());
}
// Case valid add address
AddAddress addAddress = form.get();
CustomerUpdate update = new CustomerUpdate().addAddress(addAddress.getAddress());
setCurrentCustomer(sphere().currentCustomer().update(update));
addAddress.displaySuccessMessage();
return ok(showPage());
}
@With(FormHandler.class)
public static Result update() {
// Case missing or invalid form data
Form<UpdateAddress> form = updateAddressForm.bindFromRequest();
if (form.hasErrors()) {
displayErrors("update-address", form);
return badRequest(showPage());
}
// Case valid update address
UpdateAddress updateAddress = form.get();
CustomerUpdate update = new CustomerUpdate().changeAddress(updateAddress.addressId, updateAddress.getAddress());
setCurrentCustomer(sphere().currentCustomer().update(update));
updateAddress.displaySuccessMessage();
return ok(showPage());
}
@With(FormHandler.class)
public static Result remove() {
// Case missing or invalid form data
Form<RemoveAddress> form = removeAddressForm.bindFromRequest();
if (form.hasErrors()) {
displayErrors("remove-address", form);
return badRequest(showPage());
}
// Case valid remove address
RemoveAddress removeAddress = form.get();
CustomerUpdate update = new CustomerUpdate().removeAddress(removeAddress.addressId);
setCurrentCustomer(sphere().currentCustomer().update(update));
removeAddress.displaySuccessMessage();
return ok(showPage());
}
protected static Content showPage() {
Form<UpdateCustomer> customerForm = updateCustomerForm.fill(new UpdateCustomer(getCurrentCustomer()));
List<Order> orders = sphere().currentCustomer().orders().fetch().getResults();
return customers.render(getCurrentCustomer(), orders, customerForm, updatePasswordForm);
}
}