AvailableJobsActivity

AvailableJobsActivity
 avatar
unknown
plain_text
3 years ago
36 kB
5
Indexable
package com.gn.networkon.activities.availableJobs

import android.animation.Animator
import android.content.Context
import android.content.Intent
import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.annotation.ColorRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import com.daimajia.androidanimations.library.Techniques
import com.daimajia.androidanimations.library.YoYo
import com.gn.networkon.BuildConfig
import com.gn.networkon.Constants.CommonStrings
import com.gn.networkon.Constants.CommonStrings.DateFormat.AVAILABLE_DATE_FORMAT
import com.gn.networkon.Constants.CommonStrings.DateFormat.AVAILABLE_JOB_TEXT_FORMAT
import com.gn.networkon.Constants.CommonStrings.Keys.Prefs
import com.gn.networkon.Constants.CommonStrings.TASK_LINKING_STATUS
import com.gn.networkon.NetworkAdapter.APIError
import com.gn.networkon.NetworkAdapter.CommonParams
import com.gn.networkon.NetworkAdapter.ResponseResolver
import com.gn.networkon.NetworkAdapter.RestClient
import com.gn.networkon.R
import com.gn.networkon.activities.availableJobs.adapters.GetAvailableAdapter
import com.gn.networkon.activities.availableJobs.calendar.BaseEvent
import com.gn.networkon.activities.availableJobs.calendar.Event
import com.gn.networkon.activities.availableJobs.calendar.utils.Day
import com.gn.networkon.activities.availableJobs.calendar.utils.Week
import com.gn.networkon.common.AppManager
import com.gn.networkon.common.LocalStorage
import com.gn.networkon.location.LocationUtils
import com.gn.networkon.models.locals.AvailableTaskJobs
import com.gn.networkon.models.responses.enpResponse.EnpResponse
import com.gn.networkon.models.responses.getAllTasks.AllDateDataList
import com.gn.networkon.models.responses.getAllTasks.ValuesItem
import com.gn.networkon.models.responses.getAvailableTaskData.AvailableData
import com.gn.networkon.models.responses.getAvailableTaskData.AvailableJobList
import com.gn.networkon.utilities.CommonUtils
import com.gn.networkon.utilities.applendoCalenderView.CalendarDay
import com.gn.networkon.utilities.applendoCalenderView.EventDay
import com.gn.networkon.utilities.applendoCalenderView.exceptions.OutOfDateRangeException
import com.gn.networkon.utilities.applendoCalenderView.listeners.OnCalendarPageChangeListener
import com.gn.networkon.utilities.applendoCalenderView.listeners.OnDayClickListener
import com.gn.networkon.utilities.applendoCalenderView.utils.parseColor
import kotlinx.android.synthetic.main.activity_available_job.*
import timber.log.Timber
import java.text.DateFormat
import java.text.Format
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*

class AvailableJobsActivity : AppCompatActivity(), CalendarFragment.FragmentDateListener {

    private val list: ArrayList<CalendarDay> = ArrayList()
    private val availableTaskJobs: ArrayList<AvailableTaskJobs> = ArrayList()
    private lateinit var selectedCalendarDate: Calendar
    private var currentDate = ""
    private var todayDate = ""
    private var day = 0
    private var month = 0
    private var isViewOpen = false
    private var year = 0
    var currentPosition = 0
    val events = mutableListOf<Event>()
    val dataList: ArrayList<AvailableJobList> = ArrayList()
    val tasks: ArrayList<ValuesItem> = ArrayList()

    private val jobClick = object : JobClick {
        override fun setClick(isRecurringTask: Boolean, availableTaskJobs: AvailableTaskJobs) {
            if (isRecurringTask) {
                callAcceptApi(availableTaskJobs)
            } else {
                callChangeJobStatus(availableTaskJobs)
            }
        }
    }

    private fun callChangeJobStatus(availableTaskJobs: AvailableTaskJobs) {

        val getParams = CommonParams.Builder()
                .add("job_id", availableTaskJobs.jobId)
                .add("job_assignment_id",0)
                .add("lat", LocationUtils.getLastLatLng(this).latitude)
                .add("lng", LocationUtils.getLastLatLng(this).longitude)
                .add("job_status", availableTaskJobs.task_status)


        RestClient.getApiInterface(this).changeJobStatus(getParams.build().map).enqueue(object : ResponseResolver<EnpResponse?>(this, true, true) {

            override fun failure(error: APIError<*>) {
                Log.d("---", error.message)
            }

            override fun retry() {
                callChangeJobStatus(availableTaskJobs)
            }

            override fun success(t: EnpResponse?) {
                setJobsOnPager()
            }
        })
    }

    private fun callAcceptApi(availableTaskJobs: AvailableTaskJobs) {
        val getParams = CommonParams.Builder()
        getParams.add("id", availableTaskJobs.jobId)
        getParams.add("date", getSendingDateFormat(availableTaskJobs.getUtcDatetime))
        RestClient.getApiInterface(this).accecptRequest(getParams.build().map).enqueue(object : ResponseResolver<EnpResponse?>(this, false, true) {

            override fun failure(error: APIError<*>?) {
                vDateProgress.visibility = View.GONE
            }

            override fun retry() {
                callAcceptApi(availableTaskJobs)
            }

            override fun success(enpResponse: EnpResponse?) {
                setJobsOnPager()
                rvAvailableJobs.visibility = View.GONE
                finish()
                startActivity(Intent(applicationContext,AvailableJobsActivity::class.java))
            }
        })
    }

    private fun getSendingDateFormat(utcDatetime: String?): String {
        val getTargetZone = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
        val originalFormat = if (LocalStorage.with(this).getString(CommonStrings.Keys.Prefs.DATE_TIME_FORMAT, "").isNullOrEmpty()) {
            SimpleDateFormat(CommonStrings.DateFormat.STANDARD_DATE_FORMAT_TZ, CommonUtils.getDateFormatLocale(this))
        } else {
            SimpleDateFormat(LocalStorage.with(this).getString(CommonStrings.Keys.Prefs.DATE_TIME_FORMAT, ""), CommonUtils.getDateFormatLocale(this))
        }

        val getDate = originalFormat.parse(utcDatetime)
        return getTargetZone.format(getDate)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_available_job)

        setStrings()

        setCalendar()

        setFragment()

        clicks()

        getJobData(todayDate)
    }

    private fun setJobsOnPager() {
        viewCalendar.eventRequestCallback = {
            populate(it)
        }
        viewCalendar.onEventClickListener = {
            isViewOpen = true
            val getAvailableList: ArrayList<AvailableTaskJobs> = ArrayList()
            val getSelected = dataList[it.positionOfList]
            getSelected.tasks.mapIndexed { i, valuesItem ->
                val getTaskStatus = if (getSelected.tasks.size == 1) {
                    TASK_LINKING_STATUS.ONLY_TASK.status
                } else if (i == 0) {
                    TASK_LINKING_STATUS.FIRST_TASK.status
                } else if (i == getSelected.tasks.size - 1) {
                    TASK_LINKING_STATUS.LAST_TASK.status
                } else {
                    TASK_LINKING_STATUS.NONE.status
                }
                val getJobIdData = if (getSelected.job_id != null) valuesItem.getJobId() else getSelected.recurring_id
                val isRecurringTask = getSelected.job_id == null
                getAvailableList.add(AvailableTaskJobs(valuesItem.getName(), valuesItem.getLocation(),
                        valuesItem.utcDatetime, valuesItem.utcDatetime, valuesItem.getTaskType(),
                        getTaskStatus, getJobIdData, isRecurringTask, valuesItem.lat, valuesItem.lng,
                        valuesItem.getTaskStatus(), getSelected.tasks[0].getTaskId()))
            }
            val getAdapter = GetAvailableAdapter(this, getAvailableList).apply {
                adapterJobClick = jobClick
            }
            rvAvailableJobs.isVisible = true
            cardView.isVisible = false
            rvAvailableJobs.adapter = getAdapter
        }
        /*viewCalendar.onEventLongClickListener = {
            Toast.makeText(this, it.title + " long clicked", Toast.LENGTH_SHORT).show()
        }
        viewCalendar.onAddEventListener = {
            val start = DateUtils.formatDateTime(this, it.start, DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_SHOW_TIME)
            Toast.makeText(this, "Add event at $start", Toast.LENGTH_SHORT).show()
            true
        }*/
    }

    @Suppress("MagicNumber")
    private fun populate(week: Week, force: Boolean = true) {
        if (!force && viewCalendar.cachedEvents.contains(week))
            return
        events.clear()
        dataList.mapIndexed { index, availableJobList ->
            tasks.clear()
            tasks.add(availableJobList.tasks[0])
            val getTitle = if (availableJobList.tasks[0].name.isNullOrEmpty()) {
                availableJobList.tasks[0].location
            } else {
                availableJobList.tasks[0].name
            }
            val isSingleTaskId = availableJobList.tasks.size <= 1
            //val shouldReduce30Minutes = availableJobList.start_datetime == availableJobList.end_datetime
            val getJobIdData = availableJobList.job_id ?: availableJobList.recurring_id

            val startDateTime = availableJobList.tasks[0].getUtcDatetime()
            val endDateTime = availableJobList.tasks[availableJobList.tasks.size - 1].getUtcDatetime()
            events.add(BaseEvent(
                    getTitle,
                    availableJobList.tasks[0].taskDescription,
                    R.color.colorPrimary,
                    getTime(startDateTime, isSingleTaskId),
                    getTime(endDateTime, false),
                    false, getJobIdData.toString(),
                    availableJobList.tasks[0].utcDatetime,
                    index))
        }
        /*for (i in 0..15) {
            val id = nextId++.toString()
            val start = week.start + abs(random.nextLong()) % DateUtils.WEEK_IN_MILLIS
            events.add(BaseEvent(
                    id,
                    id,
                    (random.nextInt() or 0xFF000000.toInt()) and 0x00202020.inv(),
                    start,
                    start + abs(random.nextLong()) % (DateUtils.DAY_IN_MILLIS / 8)))
        }
        for (i in 0..3) {
            val id = nextId++.toString()
            val start = week.start + abs(random.nextLong()) % DateUtils.WEEK_IN_MILLIS
            events.add(BaseEvent(
                    id,
                    id,
                    (random.nextInt() or 0xFF000000.toInt()) and 0x00202020.inv(),
                    start,
                    start + abs(random.nextLong()) % (DateUtils.DAY_IN_MILLIS * 7),
                    true))
        }*/
        viewCalendar.setEventsForWeek(week, events)
    }

    private fun getJobData(todayDate: String) {
        val startDateTime = CommonUtils.getLocalToUTCDateTimeAvailableJob(this, "$todayDate 00:00")
        val endDateTime = CommonUtils.getLocalToUTCDateTimeAvailableJob(this, "$todayDate 23:59")
        val getParams = CommonParams.Builder()
        getParams.add("end_date", endDateTime)
        getParams.add("start_date", startDateTime)
        RestClient.getApiInterface(this).getAvailableTasks(getParams.build().map).enqueue(object : ResponseResolver<AvailableData>(this, true, true) {

            override fun success(availableData: AvailableData?) {
                Timber.tag("AvailableJobList").e(availableData?.data.toString())
                if ((availableData?.data != null) && (availableData.data.size != 0)) {
                    dataList.clear()
                    dataList.addAll(availableData.data)
                }
                setJobsOnPager()
                viewCalendar.changeAdapter(todayDate, currentPosition)

                val originalFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
                val getDate = originalFormat.parse(todayDate)
                val cal = Calendar.getInstance()
                cal.time = getDate
                viewCalendar.visibleStart = Day(cal.get(Calendar.YEAR), cal.get(Calendar.WEEK_OF_YEAR), cal.get(Calendar.DAY_OF_WEEK))
                viewCalendar.changeAdapter(todayDate, currentPosition)
            }

            override fun failure(error: APIError<*>?) {
            }

            override fun retry() {
                getJobData(todayDate)
            }

        })
    }

    private fun getTime(startDatetime: String?, shouldReduce30Minutes: Boolean): Long {
        var startDate = 0L
        try {
            var getTargetZone: SimpleDateFormat? = null
            val originalFormat = if (LocalStorage.with(this).getString(CommonStrings.Keys.Prefs.DATE_TIME_FORMAT, "").isNullOrEmpty()) {
                getTargetZone = SimpleDateFormat(CommonStrings.DateFormat.STANDARD_DATE_FORMAT_TZ, CommonUtils.getDateFormatLocale(this))
                SimpleDateFormat(CommonStrings.DateFormat.STANDARD_DATE_FORMAT_TZ, CommonUtils.getDateFormatLocale(this))
            } else {
                getTargetZone = SimpleDateFormat(LocalStorage.with(this).getString(CommonStrings.Keys.Prefs.DATE_TIME_FORMAT, ""), CommonUtils.getDateFormatLocale(this))
                SimpleDateFormat(LocalStorage.with(this).getString(CommonStrings.Keys.Prefs.DATE_TIME_FORMAT, ""), CommonUtils.getDateFormatLocale(this))
            }
            originalFormat.timeZone = TimeZone.getTimeZone("UTC")
            val date: Date = originalFormat.parse(startDatetime)
            getTargetZone.timeZone = TimeZone.getTimeZone("en")
            val getOrig = getTargetZone.format(date)
            val finalDate = getTargetZone.parse(getOrig)
            val in30Minutes = (30 * 60 * 1000).toLong()
            startDate = if (shouldReduce30Minutes) finalDate.time.minus(in30Minutes) else finalDate.time
        } catch (e: ParseException) {
            e.printStackTrace()
        }
        return startDate
    }

    private fun setFragment() {
        supportFragmentManager.beginTransaction().add(R.id.flContainer, CalendarFragment(), "CalendarFragment").commit()
    }

    private fun setStrings() {
        calendarView.setHeaderColor(R.color.colorPrimary)
        tvHeaderName.text = getCurrentMonth(getCurrentDate(false))
        tvSelectedDate.text = getCurrentDate(true)
        val sdfFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
        todayDate = sdfFormat.format(Date())
    }

    private fun getCurrentMonth(currentDate: String): String {
        val cal = Calendar.getInstance()
        cal.time = SimpleDateFormat(AVAILABLE_DATE_FORMAT, CommonUtils.getDateFormatLocale(this)).parse(currentDate)
        val formatter: Format = SimpleDateFormat("MMMM", CommonUtils.getDateFormatLocale(this))
        return formatter.format(cal.time)
    }

    private fun setCalendar() {
        list.clear()
        val calendarDay = CalendarDay(Calendar.getInstance())
        if (BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon) {
            calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.colorPrimary, R.color.colorPrimary)
        } else {
            calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.accent_55, R.color.accent_55)
        }

        if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi || BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon) {
            calendarDay.labelColor = R.color.white
        } else {
            calendarDay.labelColor = R.color.colorPrimaryDark
        }

        list.add(calendarDay)
        calendarView.setCalendarDays(list)
        try {
            calendarView.setDate(Calendar.getInstance())
        } catch (e: OutOfDateRangeException) {
            e.printStackTrace()
        }
        selectedCalendarDate = Calendar.getInstance()
        calendarView.setOnForwardPageChangeListener(object : OnCalendarPageChangeListener {
            override fun onChange() {
                renderNextMonth()
            }
        })

        calendarView.setOnPreviousPageChangeListener(object : OnCalendarPageChangeListener {
            override fun onChange() {
                renderPreviousMonth()
            }
        })

        calendarView.setOnDayClickListener(object : OnDayClickListener {
            override fun onDayClick(eventDay: EventDay) {
                list.clear()
                val calendarDay = CalendarDay(eventDay.calendar)
                if (BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon) {
                    calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.colorPrimary, R.color.colorPrimary)
                } else {
                    calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.accent_55, R.color.accent_55)
                }
                if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi || BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon) {
                    calendarDay.labelColor = R.color.white
                } else {
                    calendarDay.labelColor = R.color.colorPrimaryDark
                }
                list.add(calendarDay)
                calendarView.setCalendarDays(list)
                try {
                    calendarView.setDate(eventDay.calendar)
                } catch (e: OutOfDateRangeException) {
                    e.printStackTrace()
                }
                rlCalendarContainer.visibility = View.INVISIBLE
                cardView.isVisible = true
                day = eventDay.calendar[Calendar.DAY_OF_MONTH]
                val sdfFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
                currentDate = sdfFormat.format(eventDay.calendar.time)
                todayDate = currentDate
                selectedCalendarDate = eventDay.calendar
                currentPosition = 1
                setDateData(todayDate)
            }
        })
        renderCurrentMonth()
    }

    private fun renderNextMonth() {
        var getMonthOnlyForNextFetchValue = 0
        if (month == Calendar.DECEMBER) {
            month = Calendar.JANUARY
            ++year
        } else {
            getMonthOnlyForNextFetchValue = month
            ++month
        }
        getAllDateData(false)
    }

    private fun renderPreviousMonth() {
        var getMonthOnlyForFetchValue = 0
        if (month == Calendar.JANUARY) {
            month = Calendar.DECEMBER
            --year
        } else {
            getMonthOnlyForFetchValue = month
            --month
        }
        getAllDateData(false)
    }

    private fun renderCurrentMonth() {
        val calendar = Calendar.getInstance()
        val currentMonth = calendar[Calendar.MONTH]
        val currentYear = calendar[Calendar.YEAR]
        month = currentMonth
        year = currentYear
        day = calendar[Calendar.DAY_OF_MONTH]
    }

    private fun getAllDateData(isCurrentMonth: Boolean) {
        vDateProgress.visibility = View.VISIBLE
        val getParams = getParamsForData()

        RestClient.getApiInterface(this).getAvailableTaskDates(getParams.build().map).enqueue(object : ResponseResolver<AllDateDataList?>(this, false, true) {

            override fun failure(error: APIError<*>?) {
                vDateProgress.visibility = View.GONE
            }

            override fun retry() {
                getAllDateData(isCurrentMonth)
            }

            override fun success(allDateDataList: AllDateDataList?) {
                vDateProgress.visibility = View.GONE
                AppManager.getInstance().isShouldApiHit = false
                val df: DateFormat
                val formatter: DateFormat
                if (LocalStorage.with(this@AvailableJobsActivity).getString(Prefs.DATE_TIME_FORMAT, "") == "" || LocalStorage.with(this@AvailableJobsActivity).getString(Prefs.DATE_TIME_FORMAT, "") == null) {
                    df = SimpleDateFormat("dd/MM/yyyy", CommonUtils.getDateFormatLocale(this@AvailableJobsActivity))
                    formatter = SimpleDateFormat("yyyy-MM-dd", CommonUtils.getDateFormatLocale(this@AvailableJobsActivity))
                } else {
                    Log.e("TAG", "--------------------" + LocalStorage.with(this@AvailableJobsActivity).getString(Prefs.DATE_FORMAT, ""))
                    df = SimpleDateFormat(LocalStorage.with(this@AvailableJobsActivity).getString(Prefs.DATE_FORMAT, ""), CommonUtils.getDateFormatLocale(this@AvailableJobsActivity))
                    formatter = SimpleDateFormat(LocalStorage.with(this@AvailableJobsActivity).getString(Prefs.DATE_FORMAT, ""), CommonUtils.getDateFormatLocale(this@AvailableJobsActivity))
                }
                val currentDayTime = Calendar.getInstance()
                val highlightedDates: MutableList<Calendar> = ArrayList()
                for (i in allDateDataList!!.data.indices) {
                    val date = allDateDataList.data[i]
                    val cal = Calendar.getInstance()
                    val temp = Calendar.getInstance()
                    try {
                        cal.time = df.parse(date)
                        if (currentDate != null) {
                            temp.time = formatter.parse(currentDate)
                            currentDayTime.time = formatter.parse(currentDate)
                        } else {
                            temp.time = formatter.parse(todayDate)
                        }
                    } catch (e: ParseException) {
                        e.printStackTrace()
                    }
                    if (cal.time != temp.time) {
                        highlightedDates.add(cal)
                    }
                }
                calendarView.selectedDates = highlightedDates
                if (isCurrentMonth) {
                    val list: MutableList<CalendarDay> = ArrayList()
                    val date: Date = selectedCalendarDate.time
                    val cal = Calendar.getInstance()
                    cal.time = date
                    val calendarDay = CalendarDay(cal)
                    if (BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon || BuildConfig.FLAVOR == CommonStrings.flavorsName.pooli) {
                        calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.colorPrimary, R.color.colorPrimary)
                    } else {
                        calendarDay.backgroundDrawable = getDayCircle(applicationContext, R.color.accent_55, R.color.accent_55)
                    }
                    if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi || BuildConfig.FLAVOR == CommonStrings.flavorsName.dash || BuildConfig.FLAVOR == CommonStrings.flavorsName.eathappynow || BuildConfig.FLAVOR == CommonStrings.flavorsName.cupboardwagon || BuildConfig.FLAVOR == CommonStrings.flavorsName.pooli) {
                        calendarDay.labelColor = R.color.white
                    } else {
                        calendarDay.labelColor = R.color.colorPrimaryDark
                    }
                    list.add(calendarDay)
                    calendarView.setCalendarDays(list)
                    try {
                        calendarView.setDate(cal)
                    } catch (e: OutOfDateRangeException) {
                        e.printStackTrace()
                    }
                }
            }
        })
    }

    private fun getParamsForData(): CommonParams.Builder {
        val getParams = CommonParams.Builder()
        val calendar = Calendar.getInstance(Locale.ENGLISH)
        calendar[year, month] = calendar.getActualMinimum(Calendar.DAY_OF_MONTH)
        val monthFirstDay = calendar.time
        calendar[year, month] = calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
        val monthLastDay = calendar.time
        val df = SimpleDateFormat(CommonStrings.DateFormat.AVAILABLE_SEND_DATE_FORMAT, Locale.ENGLISH)
        df.timeZone = TimeZone.getTimeZone("UTC")
        val startDateStr = df.format(monthFirstDay)
        val endDateStr = df.format(monthLastDay)
        getParams.add("start_date", startDateStr)
        getParams.add("end_date", endDateStr)
        getParams.add("get_upcoming_dates", true)
        return getParams
    }

    private fun clicks() {
        llBack.setOnClickListener {
            if (isViewOpen){
                rvAvailableJobs.isVisible = false
                cardView.isVisible = true
                isViewOpen = false
            }else{
                finish()
            }

        }

        llCalendar.setOnClickListener {
            renderCalender(false)
        }
        vCalendarBackground.setOnClickListener {
            renderCalender(true)
        }
    }

    private fun renderCalender(isCalendarVisible: Boolean) {
        cardView.isVisible = isCalendarVisible
        if (isViewOpen){
            rvAvailableJobs.isVisible = false
            cardView.isVisible = true
            isViewOpen = false
        }
        if (!isCalendarVisible) {
            YoYo.with(Techniques.BounceInDown).duration(500).withListener(object : Animator.AnimatorListener {
                override fun onAnimationStart(animator: Animator) {
                    getAllDateData(true)
                    //getAllDateData(true);
                    vCalendarBackground.visibility = View.VISIBLE
                    rlCalendarContainer.visibility = View.VISIBLE
                }

                override fun onAnimationEnd(animator: Animator) {}
                override fun onAnimationCancel(animator: Animator) {}
                override fun onAnimationRepeat(animator: Animator) {}
            }).playOn(rlCalendarContainer)
        } else {
            YoYo.with(Techniques.SlideOutUp).duration(300).withListener(object : Animator.AnimatorListener {
                override fun onAnimationStart(animator: Animator) {
                    vCalendarBackground.visibility = View.GONE
                }

                override fun onAnimationEnd(animator: Animator) {
                    rlCalendarContainer.visibility = View.INVISIBLE
                }

                override fun onAnimationCancel(animator: Animator) {}
                override fun onAnimationRepeat(animator: Animator) {}
            }).playOn(rlCalendarContainer)
        }
    }

    @JvmName("getCurrentDate1")
    private fun getCurrentDate(value: Boolean): String {
        val selectedCalendarDate = Calendar.getInstance(CommonUtils.getDateFormatLocale(this))
        val formatter = if (value) {
            SimpleDateFormat(AVAILABLE_JOB_TEXT_FORMAT, CommonUtils.getDateFormatLocale(this))
        } else {
            SimpleDateFormat(CommonStrings.DateFormat.AVAILABLE_DATE_FORMAT, CommonUtils.getDateFormatLocale(this))
        }
        return formatter.format(selectedCalendarDate.time)
    }

    fun getDayCircle(context: Context, @ColorRes borderColor: Int, @ColorRes fillColor: Int): Drawable? {
        val drawable = ContextCompat.getDrawable(context, R.drawable.background_circle_date) as GradientDrawable?
        drawable!!.setStroke(0, context.parseColor(borderColor))
        drawable.setColor(context.parseColor(fillColor))
        return drawable
    }

    override fun onResume() {

        super.onResume()
    }
    override fun onDateChanged(currentDateFrom: String) {
        tvHeaderName.text = getCurrentMonth(currentDateFrom)

        val originalFormat = SimpleDateFormat(AVAILABLE_DATE_FORMAT, CommonUtils.getDateFormatLocale(this))
        val getDate = originalFormat.parse(currentDateFrom)

        val format = SimpleDateFormat(AVAILABLE_JOB_TEXT_FORMAT, CommonUtils.getDateFormatLocale(this))
        val getDateForShow = format.format(getDate)
        tvSelectedDate.text = getDateForShow


        val sdfFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
        todayDate = sdfFormat.format(getDate)
        getJobData(todayDate)
    }

    private fun setDateData(todayDate: String) {
        getJobData(todayDate)
        val originalFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
        val getDate = originalFormat.parse(todayDate)

        val originalFormat1 = SimpleDateFormat(AVAILABLE_JOB_TEXT_FORMAT, CommonUtils.getDateFormatLocale(this))
        val getDateForShow = originalFormat1.format(getDate)
        tvSelectedDate.text = getDateForShow

        val newFormat = SimpleDateFormat(AVAILABLE_DATE_FORMAT, CommonUtils.getDateFormatLocale(this))
        val newDate = newFormat.format(getDate)

        tvHeaderName.text = getCurrentMonth(newDate)
    }
}


/*jobDialog = AlertDialog.Builder(this, R.style.CustomAlertDialog).create()
            val inflater = this.layoutInflater
            val paymentDialogView: View = inflater.inflate(R.layout.layout_tasks_invitation_item, null)
            val llTimer: FrameLayout = paymentDialogView.findViewById(R.id.llTimer)
            val llTaskName: RelativeLayout = paymentDialogView.findViewById(R.id.llTaskName)
            val tvInvitationItemCustomerName: TextView = paymentDialogView.findViewById(R.id.tvInvitationItemCustomerName)
            val tvTaskInvitationItemDate: TextView = paymentDialogView.findViewById(R.id.tvTaskInvitationItemDate)
            val tvStatus: ImageView = paymentDialogView.findViewById(R.id.tvInvitationItemTaskStatus)
            val tvStatusName: TextView = paymentDialogView.findViewById(R.id.tvStatusName)
            val tvTaskInvitationItemAddress: TextView = paymentDialogView.findViewById(R.id.tvTaskInvitationItemAddress)
            val no: TextView = paymentDialogView.findViewById(R.id.no)
            val yes: TextView = paymentDialogView.findViewById(R.id.yes)
            val llEarningEstimateLayout: LinearLayout = paymentDialogView.findViewById(R.id.llEarningEstimateLayout)
            jobDialog!!.setView(paymentDialogView)


            llTimer.isVisible = false
            llEarningEstimateLayout.isVisible = false

            no.text = StringFetcher.getString(this, R.string.decline)
            yes.text = StringFetcher.getString(this, R.string.accept)

            val getTask = tasks[it.positionOfList]
            val getAllTask = dataList[it.positionOfList]
            tvInvitationItemCustomerName.apply {
                text = if (getTask.name.isNullOrEmpty()) "" else getTask.name
            }

            llTaskName.isVisible = !getTask.name.isNullOrEmpty()

            tvTaskInvitationItemAddress.text = getTask.getLocation()
            tvTaskInvitationItemDate.text = if (LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, "") == "" || LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, "") == null) {
                if (getTask.getTaskType() == 2) {
                    if (getTask.getEndDatetime() != null) {
                        CommonUtils.convertTZToLocal(this, getTask.getUtcDatetime(), CommonStrings.DateFormat.END_USER_DATE_TIME_FORMAT) + " - " +
                                CommonUtils.convertTZToLocal(this, FirebaseNotifications.serviceEndDateTime, CommonStrings.DateFormat.END_USER_DATE_TIME_FORMAT)
                    } else {
                        CommonUtils.convertTZToLocal(this, getTask.getUtcDatetime(), CommonStrings.DateFormat.END_USER_DATE_TIME_FORMAT) + " - " +
                                CommonUtils.convertTZToLocal(this, FirebaseNotifications.serviceEndDateTime, CommonStrings.DateFormat.END_USER_DATE_TIME_FORMAT)
                    }
                } else {
                    CommonUtils.convertTZToLocal(this, getTask.getUtcDatetime(), CommonStrings.DateFormat.END_USER_DATE_TIME_FORMAT)
                }
            } else {
                if (getTask.getTaskType() == 2) {
                    if (getTask.getEndDatetime() != null) {
                        CommonUtils.convertTZToLocal(this, getTask.getUtcDatetime(), LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, "")) + " - " +
                                CommonUtils.convertTZDynamicForPushes(this, FirebaseNotifications.serviceEndDateTime, LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, ""))
                    } else {
                        CommonUtils.convertTZToLocal(this, getTask.getUtcDatetime(), LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, "")) + " - " +
                                CommonUtils.convertTZDynamicForPushes(this, FirebaseNotifications.serviceEndDateTime, LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, ""))
                    }
                } else {
                    CommonUtils.convertTZDynamicForPushes(this, getTask.getUtcDatetime(), LocalStorage.with(this).getString(Prefs.DATE_TIME_FORMAT, ""))
                }
            }


            if (getTask.getTaskType() == 0) {
                if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi) {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_pickup_pd))
                } else {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_pickup_background))
                }
                tvStatusName.text = StringFetcher.getString(this, R.string.pick_up)
            } else if (getTask.getTaskType() == 1) {
                if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi) {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_delivery_pd))
                } else {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_delivery_background))
                }
                tvStatusName.text = StringFetcher.getString(this, R.string.delivery)
            } else if (getTask.getTaskType() == 2) {
                if (BuildConfig.FLAVOR == CommonStrings.flavorsName.pidi) {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_pickup_pd))
                } else {
                    tvStatus.setBackgroundDrawable(resources.getDrawable(R.drawable.ic_pickup_background))
                }
                tvStatusName.text = StringFetcher.getString(this, R.string.service)
            }

            no.setOnClickListener {
                jobDialog!!.dismiss()
            }

            yes.setOnClickListener {
                jobDialog!!.dismiss()
            }
            jobDialog!!.show()*/
Editor is loading...