Skip to content

Commit

Permalink
feat: Create Onsite Order for Tickets (#1319)
Browse files Browse the repository at this point in the history
* feat: Create Order for Tickets

* feat: Create Sell Orders Onsite

* fix: Minor fixes

* fix: Add maximum order check
  • Loading branch information
Masquerade0097 authored and iamareebjamal committed Aug 10, 2018
1 parent d57efc1 commit 86ed4aa
Show file tree
Hide file tree
Showing 21 changed files with 798 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
package com.eventyay.organizer.common.di.module;

import com.facebook.stetho.okhttp3.StethoInterceptor;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.github.jasminb.jsonapi.retrofit.JSONAPIConverterFactory;

import com.eventyay.organizer.OrgaProvider;
import com.eventyay.organizer.common.Constants;
import com.eventyay.organizer.data.attendee.Attendee;
Expand All @@ -26,6 +19,14 @@
import com.eventyay.organizer.data.ticket.Ticket;
import com.eventyay.organizer.data.tracks.Track;
import com.eventyay.organizer.data.user.User;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.github.jasminb.jsonapi.retrofit.JSONAPIConverterFactory;

import com.eventyay.organizer.data.ticket.OnSiteTicket;

import javax.inject.Named;
import javax.inject.Singleton;
Expand Down Expand Up @@ -63,7 +64,7 @@ ObjectMapper providesObjectMapper() {
Class[] providesMappedClasses() {
return new Class[]{Event.class, Attendee.class, Ticket.class, User.class, EventStatistics.class,
Faq.class, Copyright.class, Feedback.class, Track.class, Session.class, Sponsor.class,
Speaker.class, SpeakersCall.class, Order.class, OrderStatistics.class};
Speaker.class, SpeakersCall.class, Order.class, OrderStatistics.class, OnSiteTicket.class};
}

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.eventyay.organizer.core.faq.create.CreateFaqViewModel;
import com.eventyay.organizer.core.main.EventViewModel;
import com.eventyay.organizer.core.main.OrganizerViewModel;
import com.eventyay.organizer.core.orders.create.CreateOrderViewModel;
import com.eventyay.organizer.core.orders.detail.OrderDetailViewModel;
import com.eventyay.organizer.core.orders.list.OrdersViewModel;
import com.eventyay.organizer.core.organizer.password.ChangePasswordViewModel;
Expand Down Expand Up @@ -59,6 +60,11 @@ public abstract class ViewModelModule {
@ViewModelKey(OrdersViewModel.class)
public abstract ViewModel bindOrdersViewModel(OrdersViewModel ordersViewModel);

@Binds
@IntoMap
@ViewModelKey(CreateOrderViewModel.class)
public abstract ViewModel bindCreateOrderViewModel(CreateOrderViewModel createOrderViewModel);

@Binds
@IntoMap
@ViewModelKey(CreateSpeakersCallViewModel.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
import com.eventyay.organizer.core.event.about.AboutEventActivity;
import com.eventyay.organizer.core.event.chart.ChartActivity;
import com.eventyay.organizer.core.event.create.CreateEventActivity;
import com.eventyay.organizer.core.event.create.UpdateEventFragment;
import com.eventyay.organizer.core.event.create.EventDetailsStepOne;
import com.eventyay.organizer.core.event.create.EventDetailsStepThree;
import com.eventyay.organizer.core.event.create.EventDetailsStepTwo;
import com.eventyay.organizer.core.event.create.UpdateEventFragment;
import com.eventyay.organizer.core.main.MainActivity;
import com.eventyay.organizer.core.orders.create.CreateOrderFragment;
import com.eventyay.organizer.core.organizer.detail.OrganizerDetailActivity;
import com.eventyay.organizer.core.speaker.details.SpeakerDetailsActivity;
import com.eventyay.organizer.core.speaker.details.SpeakerDetailsFragment;
Expand Down Expand Up @@ -59,4 +60,7 @@ public abstract class ActivityBuildersModule {
@ContributesAndroidInjector
abstract EventDetailsStepThree contributesEventDetailsLevel3();

@ContributesAndroidInjector
abstract CreateOrderFragment contributeCreateOrderFragment();

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.eventyay.organizer.core.event.list.EventListFragment;
import com.eventyay.organizer.core.faq.list.FaqListFragment;
import com.eventyay.organizer.core.feedback.list.FeedbackListFragment;
import com.eventyay.organizer.core.orders.create.CreateOrderFragment;
import com.eventyay.organizer.core.orders.list.OrdersFragment;
import com.eventyay.organizer.core.settings.EventSettingsFragment;
import com.eventyay.organizer.core.settings.SettingsFragment;
Expand Down Expand Up @@ -63,6 +64,9 @@ void loadFragment(int navItemId) {
case R.id.nav_dashboard:
fragment = EventDashboardFragment.newInstance(eventId);
break;
case R.id.nav_sell:
fragment = CreateOrderFragment.newInstance(eventId);
break;
case R.id.nav_attendees:
fragment = AttendeesFragment.newInstance(eventId);
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
package com.eventyay.organizer.core.orders.create;

import android.arch.lifecycle.ViewModelProvider;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.eventyay.organizer.R;
import com.eventyay.organizer.common.mvp.view.BaseFragment;
import com.eventyay.organizer.core.main.MainActivity;
import com.eventyay.organizer.core.orders.create.adapter.CreateOrderTicketsAdapter;
import com.eventyay.organizer.data.ticket.Ticket;
import com.eventyay.organizer.databinding.OrderCreateLayoutBinding;
import com.eventyay.organizer.ui.ViewUtils;

import java.util.List;

import javax.inject.Inject;

public class CreateOrderFragment extends BaseFragment implements CreateOrderView {

private long eventId;
private Context context;

@Inject
ViewModelProvider.Factory viewModelFactory;

private CreateOrderViewModel createOrderViewModel;
private CreateOrderTicketsAdapter createOrderTicketsAdapter;

private OrderCreateLayoutBinding binding;
private SwipeRefreshLayout refreshLayout;

public static CreateOrderFragment newInstance(long eventId) {
CreateOrderFragment fragment = new CreateOrderFragment();
Bundle args = new Bundle();
args.putLong(MainActivity.EVENT_KEY, eventId);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setHasOptionsMenu(true);

context = getContext();

if (getArguments() != null) {
eventId = getArguments().getLong(MainActivity.EVENT_KEY);
}
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.order_create_layout, container, false);

createOrderViewModel = ViewModelProviders.of(this, viewModelFactory).get(CreateOrderViewModel.class);
binding.clearButton.setOnClickListener(view -> createOrderViewModel.clearSelectedTickets());
binding.submit.setOnClickListener(view -> createOrderViewModel.createOnSiteOrder(eventId));

return binding.getRoot();
}

@Override
public void onStart() {
super.onStart();
setupRefreshListener();
setupRecyclerView();

createOrderViewModel.getProgress().observe(this, this::showProgress);
createOrderViewModel.getError().observe(this, this::showError);
createOrderViewModel.getSuccess().observe(this, this::onSuccess);
createOrderViewModel.getOrderAmount().observe(this, this::showOrderAmount);

loadData(false);
}

@Override
protected int getTitle() {
return R.string.create_order;
}

@Override
public void onStop() {
super.onStop();
refreshLayout.setOnRefreshListener(null);
}

private void setupRecyclerView() {
createOrderTicketsAdapter = new CreateOrderTicketsAdapter(createOrderViewModel);

RecyclerView ticketsRecyclerView = binding.ticketsRecyclerView;
ticketsRecyclerView.setLayoutManager(new LinearLayoutManager(context));
ticketsRecyclerView.setAdapter(createOrderTicketsAdapter);
}

private void setupRefreshListener() {
refreshLayout = binding.swipeContainer;
refreshLayout.setOnRefreshListener(() -> {
refreshLayout.setRefreshing(false);
loadData(true);
});
}

public void showOrderAmount(Float amount) {
binding.orderAmount.setText(String.valueOf(amount));
}

@Override
public void showError(String error) {
ViewUtils.showSnackbar(binding.getRoot(), error);
}

@Override
public void showProgress(boolean show) {
ViewUtils.showView(binding.progressBar, show);
}

@Override
public void onSuccess(String message) {
ViewUtils.showSnackbar(binding.getRoot(), message);
}

public void loadData(boolean reload) {
createOrderViewModel.getTicketsUnderEvent(eventId, reload).observe(this, this::showTickets);
}

public void showTickets(List<Ticket> tickets) {
if (tickets == null || tickets.isEmpty()) {
binding.ticketsInfo.setVisibility(View.GONE);
binding.submit.setVisibility(View.GONE);
return;
}
createOrderTicketsAdapter.setTickets(tickets);
}

public void showEmptyView(boolean show) {
ViewUtils.showView(binding.emptyView, show);
}

@Override
public void onRefreshComplete(boolean success) {
if (success)
ViewUtils.showSnackbar(binding.getRoot(), R.string.refresh_complete);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.eventyay.organizer.core.orders.create;

import com.eventyay.organizer.common.mvp.view.Erroneous;
import com.eventyay.organizer.common.mvp.view.Progressive;
import com.eventyay.organizer.common.mvp.view.Refreshable;
import com.eventyay.organizer.common.mvp.view.Successful;

public interface CreateOrderView extends Progressive, Erroneous, Refreshable, Successful {
}
Loading

0 comments on commit 86ed4aa

Please sign in to comment.