Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/runConfigurations.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(rootProject.file("keystore.debug")))

android {
buildFeatures {
dataBinding true
}
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
Expand Down Expand Up @@ -161,9 +164,9 @@ dependencies {
)

// Google Places API
implementation "com.google.android.libraries.places:places:2.2.0"
implementation "com.google.android.libraries.places:places:2.4.0"
// Google Material
implementation "com.google.android.material:material:1.2.0-alpha05"
implementation "com.google.android.material:material:1.5.0-alpha01"

// FireBase libraries
implementation(
Expand Down Expand Up @@ -192,8 +195,8 @@ dependencies {
"com.github.bumptech.glide:glide:$versions.glide",
"jp.wasabeef:glide-transformations:4.1.0"
)
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
kapt "com.github.bumptech.glide:compiler:$versions.glide"

Expand All @@ -207,6 +210,7 @@ dependencies {
// Epoxy
implementation "com.airbnb.android:epoxy:$versions.epoxy"
kapt "com.airbnb.android:epoxy-processor:$versions.epoxy"
implementation "com.airbnb.android:epoxy-databinding:$versions.epoxy"

// Lottie
// UNUSED RIGHT NOW
Expand Down
5 changes: 5 additions & 0 deletions app/src/core/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,11 @@
android:label="Insight"
android:theme="@style/AppTheme" />

<activity
android:name=".manager.activities.CatalogActivity"
android:label=""
android:theme="@style/AppTheme" />

<service android:name=".data.notifications.AppMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import com.checkin.app.checkin.auth.AuthRequestModel
import com.checkin.app.checkin.auth.AuthResultModel
import com.checkin.app.checkin.home.model.*
import com.checkin.app.checkin.manager.models.*
import com.checkin.app.checkin.manager.models.MenuGroupModel
import com.checkin.app.checkin.manager.models.CatalogMenuModel
import com.checkin.app.checkin.menu.models.*
import com.checkin.app.checkin.misc.models.GenericDetailModel
import com.checkin.app.checkin.misc.paytm.PaytmModel
Expand Down Expand Up @@ -421,6 +423,20 @@ interface WebApiService {
@POST("menus/restaurants/{restaurant_id}/manage/items/")
fun postChangeMenuAvailability(@Path("restaurant_id") restaurantId: Long, @Body msOrderStatus: List<InventoryAvailabilityModel>): Call<List<InventoryAvailabilityModel>>

@POST("/menus/restaurants/{restaurant_id}/")
fun postRestaurantMenu(@Path("restaurant_id") restaurantId: Long, @Body menu: CatalogMenuModel): Call<CatalogMenuModel>

@POST("/menus/groups/restaurants/{restaurant_id}/")
fun postMenuGroup(@Path("restaurant_id") restaurantId: Long, @Body menuGroup: MenuGroupModel): Call<MenuGroupModel>

@GET("/menus/items/groups/{group_id}/")
fun getGroupMenuItem(@Path("group_id") groupId: Long): Call<GroupMenuItemModel>

@POST("/menus/items/groups/{group_id}/")
fun postGroupMenuItem(@Path("group_id") groupId: Long, @Body groupMenuItem: GroupMenuItemModel): Call<GroupMenuItemModel>

@GET("menus/groups/restaurants/{restaurant_id}")
fun getMenuGroups(@Path("restaurant_id") restaurantId: Long): Call<List<MenuGroupModel>>
// endregion

// region PAYMENT
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.checkin.app.checkin.manager

import android.app.Application
import android.content.Context
import androidx.lifecycle.LiveData
import com.checkin.app.checkin.data.BaseRepository
import com.checkin.app.checkin.data.network.ApiClient
import com.checkin.app.checkin.data.network.ApiResponse
import com.checkin.app.checkin.data.network.RetrofitLiveData
import com.checkin.app.checkin.data.network.WebApiService
import com.checkin.app.checkin.data.resource.NetworkBoundResource
import com.checkin.app.checkin.data.resource.Resource
import com.checkin.app.checkin.manager.models.MenuGroupModel
import com.checkin.app.checkin.manager.models.CatalogMenuModel
import com.checkin.app.checkin.manager.models.GroupMenuItemModel
import com.checkin.app.checkin.utility.SingletonHolder
import java.security.acl.Group

class CatalogRepository private constructor(context: Context) : BaseRepository() {
private val mWebService: WebApiService = ApiClient.getApiService(context)

fun createMenu(restaurantId: Long, menu: CatalogMenuModel): LiveData<Resource<CatalogMenuModel>> {
return object : NetworkBoundResource<CatalogMenuModel, CatalogMenuModel>() {
override fun shouldUseLocalDb(): Boolean {
return false
}

override fun createCall(): LiveData<ApiResponse<CatalogMenuModel>> {
return RetrofitLiveData(mWebService.postRestaurantMenu(restaurantId, menu))
}
}.asLiveData
}

fun createMenuGroup(restaurantId: Long, menuGroup : MenuGroupModel): LiveData<Resource<MenuGroupModel>> {
return object : NetworkBoundResource<MenuGroupModel, MenuGroupModel>() {
override fun shouldUseLocalDb(): Boolean {
return false
}

override fun createCall(): LiveData<ApiResponse<MenuGroupModel>> {
return RetrofitLiveData(mWebService.postMenuGroup(restaurantId, menuGroup))
}
}.asLiveData

}

fun getMenuGroups(restaurantId: Long): LiveData<Resource<List<MenuGroupModel>>> {
return object : NetworkBoundResource<List<MenuGroupModel>, List<MenuGroupModel>>() {
override fun shouldUseLocalDb(): Boolean {
return false
}

override fun createCall(): LiveData<ApiResponse<List<MenuGroupModel>>> {
return RetrofitLiveData(mWebService.getMenuGroups(restaurantId))
}
}.asLiveData

}

fun createMenuItem(groupId: Long, menuItem : GroupMenuItemModel): LiveData<Resource<GroupMenuItemModel>> {
return object : NetworkBoundResource<GroupMenuItemModel, GroupMenuItemModel>() {
override fun shouldUseLocalDb(): Boolean {
return false
}

override fun createCall(): LiveData<ApiResponse<GroupMenuItemModel>> {
return RetrofitLiveData(mWebService.postGroupMenuItem(groupId, menuItem))
}
}.asLiveData

}

companion object : SingletonHolder<CatalogRepository, Application>({ CatalogRepository(it.applicationContext) })
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.checkin.app.checkin.manager.activities

import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import androidx.activity.viewModels
import androidx.appcompat.app.ActionBar
import com.checkin.app.checkin.R
import com.checkin.app.checkin.databinding.ActivityCatalogBinding
import com.checkin.app.checkin.manager.fragments.CatalogDetailsFragment
import com.checkin.app.checkin.manager.viewmodels.CatalogViewModel
import com.checkin.app.checkin.misc.activities.BaseActivity

class CatalogActivity : BaseActivity() {

private var _binding: ActivityCatalogBinding? = null
val binding get() = _binding!!
private val mViewModel: CatalogViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = ActivityCatalogBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbarCatalogActivity)
val actionBar: ActionBar? = supportActionBar
actionBar?.setHomeAsUpIndicator(R.drawable.ic_shape)
actionBar?.setDisplayHomeAsUpEnabled(true)
setUpObservers(intent.getLongExtra(ManagerWorkActivity.KEY_RESTAURANT_PK, 0L))
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container_catalog, CatalogDetailsFragment.newInstance())
.commit()
}

private fun setUpObservers(shopPk: Long) {
mViewModel.shopPk = 12
Log.d("CatalogActivity", 12.toString())
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
onBackPressed()
return true
}
}
return super.onOptionsItemSelected(item)
}

override fun onDestroy() {
super.onDestroy()
_binding = null
}

companion object {
const val KEY_RESTAURANT_PK = "catalog.restaurant_pk"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.checkin.app.checkin.manager.activities

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.TextView
import androidx.activity.viewModels
import androidx.appcompat.widget.SwitchCompat
Expand Down Expand Up @@ -70,9 +71,9 @@ class ManagerWorkActivity : BaseAccountActivity(), LiveOrdersInteraction {
pagerAdapter.setupWithTab(tabLayout, pagerManager)
pagerManager.addOnPageChangeListener(object : SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
if (actionBar != null) {
tvActionBarTitle.text = pagerAdapter.getPageTitle(position)
}
if (position == 3) swLiveOrdersToggle.visibility = View.GONE
else swLiveOrdersToggle.visibility = View.VISIBLE
tvActionBarTitle.text = pagerAdapter.getPageTitle(position)
}
})
swLiveOrdersToggle.setOnCheckedChangeListener { _, isChecked ->
Expand Down Expand Up @@ -150,26 +151,29 @@ class ManagerWorkActivity : BaseAccountActivity(), LiveOrdersInteraction {
0 -> R.drawable.ic_orders_list_toggle
1 -> R.drawable.ic_stats_toggle
2 -> R.drawable.ic_invoice_toggle
3 -> R.drawable.ic_catalog_toggle
else -> 0
}

override fun getItem(position: Int): Fragment = when (position) {
0 -> if (isActivated) mTableFragment else mActiveTableFragment
1 -> ManagerStatsFragment.newInstance()
else -> ManagerInvoiceFragment.newInstance()
2 -> ManagerInvoiceFragment.newInstance()
else -> CatalogAddFragment.newInstance()
}

override fun getItemPosition(obj: Any): Int = if (oldValActivated != isActivated) {
oldValActivated = isActivated
PagerAdapter.POSITION_NONE
} else PagerAdapter.POSITION_UNCHANGED

override fun getCount(): Int = 3
override fun getCount(): Int = 4

override fun getPageTitle(position: Int): CharSequence? = when (position) {
0 -> "Live Orders"
1 -> "Insight"
2 -> "Invoice"
3 -> "Catalog"
else -> null
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.checkin.app.checkin.manager.adapters

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.checkin.app.checkin.databinding.ItemCatalogAddCustomizationBinding
import com.checkin.app.checkin.manager.models.ItemCustomizationModel

class CatalogCustomizationAdapter(val listener: CustomizationClickListener) : RecyclerView.Adapter<CatalogCustomizationAdapter.CatalogCustomizationViewHolder>() {
private lateinit var list: List<ItemCustomizationModel>

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CatalogCustomizationViewHolder {
return CatalogCustomizationViewHolder(ItemCatalogAddCustomizationBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}

override fun onBindViewHolder(holder: CatalogCustomizationViewHolder, position: Int) {
holder.bind(list[position])
holder.binding.tvAddMoreFields.setOnClickListener {
listener.onItemClicked(position)
}
}

override fun getItemCount(): Int = list.size

fun setData(list: List<ItemCustomizationModel>) {
this.list = list
notifyDataSetChanged()
}

inner class CatalogCustomizationViewHolder(val binding: ItemCatalogAddCustomizationBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: ItemCustomizationModel) {
binding.customizationModel = item
val adapter = CatalogCustomizationFieldAdapter()
adapter.setData(item.listOfFields)
binding.rvFields.adapter = adapter
}
}
}

interface CustomizationClickListener {
fun onItemClicked(position: Int)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.checkin.app.checkin.manager.adapters

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.checkin.app.checkin.databinding.ItemCustomizationFieldBinding
import com.checkin.app.checkin.manager.models.CustomizationFieldModel

class CatalogCustomizationFieldAdapter : RecyclerView.Adapter<CatalogCustomizationFieldAdapter.CatalogCustomizationFieldViewHolder>() {
private lateinit var list: List<CustomizationFieldModel>

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CatalogCustomizationFieldViewHolder {
return CatalogCustomizationFieldViewHolder(ItemCustomizationFieldBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}

override fun onBindViewHolder(holder: CatalogCustomizationFieldViewHolder, position: Int) {
holder.bind(list[position])
}

override fun getItemCount(): Int = list.size

fun setData(list: List<CustomizationFieldModel>) {
this.list = list
notifyDataSetChanged()
}

class CatalogCustomizationFieldViewHolder(val binding: ItemCustomizationFieldBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: CustomizationFieldModel) {
binding.fieldModel = item
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.checkin.app.checkin.manager.adapters

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.checkin.app.checkin.databinding.ItemCatalogAddVariantBinding
import com.checkin.app.checkin.manager.models.ItemVariantModel

class CatalogVariantAdapter : RecyclerView.Adapter<CatalogVariantAdapter.CatalogVariantViewHolder>() {
private lateinit var list: List<ItemVariantModel>

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CatalogVariantViewHolder {
return CatalogVariantViewHolder(ItemCatalogAddVariantBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}

override fun onBindViewHolder(holder: CatalogVariantViewHolder, position: Int) {
holder.bind(list[position])
}

override fun getItemCount(): Int = list.size

fun setData(list: List<ItemVariantModel>) {
this.list = list
notifyDataSetChanged()
}

class CatalogVariantViewHolder(val binding: ItemCatalogAddVariantBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: ItemVariantModel) {
binding.variant = item
}
}
}
Loading