package com.mozu.mozuandroidinstoreassistant.app;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import com.mozu.api.ApiException;
import com.mozu.api.contracts.commerceruntime.fulfillment.FulfillmentInfo;
import com.mozu.api.contracts.commerceruntime.orders.Order;
import com.mozu.api.contracts.commerceruntime.payments.BillingInfo;
import com.mozu.api.contracts.core.Contact;
import com.mozu.api.contracts.customer.ContactType;
import com.mozu.api.contracts.customer.CustomerAccount;
import com.mozu.api.contracts.customer.CustomerContact;
import com.mozu.mozuandroidinstoreassistant.app.customer.CustomerLookupFragment;
import com.mozu.mozuandroidinstoreassistant.app.dialog.ErrorMessageAlertDialog;
import com.mozu.mozuandroidinstoreassistant.app.order.NewOrderActivity;
import com.mozu.mozuandroidinstoreassistant.app.order.loaders.NewOrderManager;
import butterknife.ButterKnife;
import rx.Subscriber;
import rx.android.observables.AndroidObservable;
public class OrderCreationAddCustomerActivity extends BaseActivity {
private static final String ORDER_EXTRA_KEY = "ORDER";
private static final String CURRENT_TENANT_ID = "curTenantIdWhenActLoaded";
private static final String CURRENT_SITE_ID = "curSiteIdWhenActLoaded";
private static final String ORDER_CUSTOMER_EXTRA_KEY = "order_customer";
private static final int CREATE_CUSTOMER = 1;
private static String BILLING = "billing";
private static String SHIPPING = "shipping";
private Order mOrder;
private int mTenantId;
private int mSiteId;
private CustomerAccount mCustomerAccount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_create);
ButterKnife.inject(this);
if (getIntent() != null) {
mOrder = (Order) getIntent().getSerializableExtra(ORDER_EXTRA_KEY);
mTenantId = getIntent().getIntExtra(CURRENT_TENANT_ID, -1);
mSiteId = getIntent().getIntExtra(CURRENT_SITE_ID, -1);
} else if (savedInstanceState != null) {
mOrder = (Order) savedInstanceState.getSerializable(ORDER_EXTRA_KEY);
mTenantId = savedInstanceState.getInt(CURRENT_TENANT_ID, -1);
mSiteId = savedInstanceState.getInt(CURRENT_SITE_ID, -1);
}
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.replace(R.id.content_fragment_holder, CustomerLookupFragment.getInstance(mTenantId, mSiteId), "create")
.commit();
}
if (getActionBar() != null) {
getActionBar().setDisplayShowHomeEnabled(false);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setDisplayShowCustomEnabled(true);
getActionBar().setTitle(" " + getString(R.string.create_order));
}
}
public void onSubmitClicked() {
mOrder = new Order();
mOrder.setCustomerAccountId(mCustomerAccount.getId());
BillingInfo billingInfo = new BillingInfo();
billingInfo.setBillingContact(getDefaultContact(mCustomerAccount, BILLING));
mOrder.setBillingInfo(billingInfo);
FulfillmentInfo fulfillmentInfo = new FulfillmentInfo();
fulfillmentInfo.setFulfillmentContact(getDefaultContact(mCustomerAccount, SHIPPING));
mOrder.setFulfillmentInfo(fulfillmentInfo);
AndroidObservable.bindActivity(OrderCreationAddCustomerActivity.this, NewOrderManager.getInstance().createOrder(mTenantId, mSiteId, mOrder))
.subscribe(new Subscriber<Order>() {
@Override
public void onCompleted() {
Intent intent = new Intent(OrderCreationAddCustomerActivity.this, NewOrderActivity.class);
intent.putExtra(ORDER_EXTRA_KEY, mOrder.getId());
startActivity(intent);
finish();
}
@Override
public void onError(Throwable e) {
if (e instanceof ApiException) {
ErrorMessageAlertDialog.getStandardErrorMessageAlertDialog(OrderCreationAddCustomerActivity.this, ((ApiException) e));
} else {
ErrorMessageAlertDialog.getStandardErrorMessageAlertDialog(OrderCreationAddCustomerActivity.this, getString(R.string.standard_error)).show();
}
}
@Override
public void onNext(Order order) {
mOrder = order;
}
});
}
public Contact getContact(CustomerContact customerContact) {
Contact contact = new Contact();
contact.setAddress(customerContact.getAddress());
contact.setEmail(customerContact.getEmail());
contact.setFirstName(customerContact.getFirstName());
contact.setLastNameOrSurname(customerContact.getLastNameOrSurname());
contact.setPhoneNumbers(customerContact.getPhoneNumbers());
return contact;
}
private Contact getDefaultContact(CustomerAccount mCustomerAccount, String contactType) {
Contact defaultContact = null;
for (CustomerContact contact : mCustomerAccount.getContacts()) {
if (defaultContact == null) {
defaultContact = getContact(contact);
}
for (ContactType type : contact.getTypes()) {
if (type.getName().equalsIgnoreCase(contactType) && type.getIsPrimary()) {
defaultContact = getContact(contact);
return defaultContact;
}
}
}
return defaultContact;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onMenuItemSelected(featureId, item);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable(ORDER_EXTRA_KEY, mOrder);
outState.putInt(CURRENT_TENANT_ID, mTenantId);
outState.putInt(CURRENT_SITE_ID, mSiteId);
super.onSaveInstanceState(outState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CREATE_CUSTOMER && resultCode == RESULT_OK) {
mCustomerAccount = (CustomerAccount) data.getSerializableExtra(CustomerUpdateActivity.CUSTOMER);
onSubmitClicked();
}
}
}