lmw
2023-05-12 f67802a41f9e01444d1115f34ecc6e1beb05fc3b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.fuban.user.ui.charter
 
import android.app.Activity
import android.content.Intent
import androidx.core.os.bundleOf
import cn.sinata.xldutils.callPhone
import cn.sinata.xldutils.fragment.BaseFragment
import cn.sinata.xldutils.utils.isValidPhone
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optString
import com.fuban.user.FBApplication
import com.fuban.user.R
import com.fuban.user.dialog.AlertDialog
import com.fuban.user.dialog.CharterReserveTimeDialog
import com.fuban.user.dialog.SingleWheelDialog
import com.fuban.user.interfaces.StringCallback
import com.fuban.user.network.HttpManager
import com.fuban.user.network.requestByF
import com.fuban.user.ui.H5Activity
import com.fuban.user.ui.MainActivity
import com.fuban.user.utils.Const
import com.fuban.user.utils.IntegerInputFilter
import kotlinx.android.synthetic.main.fragment_charter.*
import org.jetbrains.anko.sdk27.coroutines.onClick
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.support.v4.startActivityForResult
 
class CharterFragment:BaseFragment() {
    override fun contentViewId() = R.layout.fragment_charter
 
    private var carTypeId = 0 //车型
    private var min = 0 //最低价
    private var max = 0 //最高价
 
    private val days = arrayListOf("一天","两天","三天","四天","五天","六天","七天")
    private var day = 0
    private val mainActivity by lazy {
        activity as MainActivity
    }
    private val singleWheelDialog by lazy {
        val d = SingleWheelDialog()
        d.arguments = bundleOf("title" to "选择用车时长","data" to days)
        d.setCallback(object :StringCallback{
            override fun onRlt(rlt: String) {
                tv_duration.text = rlt
                day = days.indexOf(rlt)+1
                calculate()
            }
        })
        d
    }
 
    private val successDialog by lazy {
        val alertDialog = AlertDialog()
        alertDialog.arguments = bundleOf("msg" to "提交成功!我们将根据您的需求,与您取得联系,请您保持手机的畅通。")
        alertDialog.setDismissCallback(object :AlertDialog.OnDismiss{
            override fun onDismiss() {
                clearData()
            }
        })
        alertDialog
    }
 
 
    override fun onFirstVisibleToUser() {
        et_count.filters = arrayOf(IntegerInputFilter(999))
 
        getPhone()
        tv_rule.onClick { getRule() }
 
        tv_time.onClick {
            val charterReserveTimeDialog = CharterReserveTimeDialog()
            charterReserveTimeDialog.setCallback(object :StringCallback{
                override fun onRlt(rlt: String) {
                    tv_time.text = rlt
                }
            })
            charterReserveTimeDialog.show(fragmentManager!!,"time")
        }
        tv_duration.onClick {
            if (!singleWheelDialog.isAdded)
                singleWheelDialog.show(fragmentManager!!,"count")
        }
        tv_type.onClick {
            startActivityForResult<CharterTypeActivity>(Const.RequestCode.CHAPTER_TYPE)
        }
        tv_usage.onClick {
            startActivityForResult<ChooseUsageActivity>(Const.RequestCode.CHAPTER_USAGE,
                "data" to arrayListOf("旅游","商务","会议"))
        }
        tv_action.onClick {
            if (mainActivity.checkLogin()){
                val time = tv_time.text.toString()
                if (time.isEmpty()){
                    myToast("请选择用车时间")
                    return@onClick
                }
                if (day == 0){
                    myToast("请选择用车时长")
                    return@onClick
                }
                if (carTypeId == 0){
                    myToast("请选择车型")
                    return@onClick
                }
                val usage = tv_usage.text.toString()
                if (usage.isEmpty()){
                    myToast("请选择车辆用途")
                    return@onClick
                }
                val countS = et_count.text.toString()
                if(countS.isEmpty()){
                    myToast("请填写乘车人数")
                    return@onClick
                }
                val name = et_name.text.toString()
                if (name.isEmpty()){
                    myToast("请填写联系人姓名")
                    return@onClick
                }
                val phone = et_phone.text.toString()
                if (!phone.isValidPhone()){
                    myToast("请填写正确的联系电话")
                    return@onClick
                }
                showDialog()
                tv_action.isEnabled = false
                HttpManager.orderCharteredCar(day,"$time 00:00:00","${FBApplication.lon},${FBApplication.lat}",name,
                    phone,usage,countS.toInt(),carTypeId).requestByF(this@CharterFragment,success = {_,_->
                    successDialog.show(fragmentManager!!,"suc")
                    tv_action.isEnabled = true
                }){_,_-> tv_action.isEnabled = true}
            }
        }
    }
 
    private fun getPhone(){
        HttpManager.queryPhones(FBApplication.chooseCityCode).requestByF(this){ _, data->
            data?.filter { it.type == 3 }?.forEach {
                tv_phone.text = "旅游包车调度电话:%s".format(it.phone)
                tv_phone.onClick {_->
                    callPhone(it.phone)
                }
            }
        }
    }
 
    private fun getRule(){
        HttpManager.getH5(14).requestByF(this){_,data->
            data?.let {
                tv_rule.setOnClickListener {_->
                    startActivity<H5Activity>("title" to "包车规则","url" to it.optString("content"))
                }
            }
        }
    }
 
    /**
     * 计算价格
     */
    private fun calculate(){
        if (carTypeId!=0&&day!=0){
            tv_price.text = "预计价:¥%d-¥%d".format(min*day,max*day)
        }
    }
 
    private fun clearData(){
        tv_time.text = ""
        tv_duration.text = ""
        tv_type.text = ""
        tv_usage.text = ""
        et_count.setText("")
        et_name.setText("")
        et_phone.setText("")
        tv_price.text = ""
        day = 0
        carTypeId = 0
        et_phone.clearFocus()
    }
 
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK&&data!=null){
            if (requestCode == Const.RequestCode.CHAPTER_TYPE){
                tv_type.text = data.getStringExtra("name")
                carTypeId = data.getIntExtra("id",0)
                min = data.getIntExtra("min",0)
                max = data.getIntExtra("max",0)
                calculate()
            }else if (requestCode == Const.RequestCode.CHAPTER_USAGE){
                tv_usage.text = data.getStringExtra("data")
            }
        }
    }
}