宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-07-05 0d8f5fc8a516bfd07e425909e4a4432600572ee7
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
//
//  InvoiceViewController.swift
//  OKProject
//
//  Created by 无故事王国 on 2022/5/30.
//  Copyright © 2022 yangwang. All rights reserved.
//
 
import UIKit
import QMUIKit
import NSObject_Rx
import RxRelay
 
 
let RefreshInvoice_Noti = Notification.Name.init(rawValue: "refreshInvoice_Noti")
/// 开发票
class InvoiceViewController: YYViewController {
 
    @IBOutlet weak var optionBtn: QMUIButton!
    @IBOutlet weak var filterBtn: QMUIButton!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var selectAllBtn: QMUIButton!
    @IBOutlet weak var selectInfoL: UILabel!
    @IBOutlet weak var nextStepBtn: UIButton!
 
    private var invoiceTypeView:CarBrandListView?
    private var moreVC:InvoiceMoreViewController?
    private var selectItems:Set = Set<InvoiceModel>()
    private var selectInvoiceIndex:Int = 0
 
    private var viewMoel = InvoiceOrderViewModel()
 
 
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "开发票"
 
        //73989 【开发票】 其他订单不显示。
        optionBtn.isHidden = true
    }
 
    override func setupViews() {
        super.setupViews()
 
        viewMoel.configure(tableView: tableView)
        optionBtn.imagePosition = .right
        optionBtn.spacingBetweenImageAndTitle = 3
        tableView.register(UINib(nibName: "InvoiceTCell", bundle: nil), forCellReuseIdentifier: "_InvoiceTCell")
        tableView.delegate = self
        tableView.dataSource = self
        tableView.separatorStyle = .none
 
        let rightBtn = UIBarButtonItem(title: "历史开票", style: .plain, target: self, action: #selector(historyAction))
        rightBtn.tintColor = UIColor(hexString: "#666666")
        navigationItem.rightBarButtonItem = rightBtn
 
        tableView.beginRefreshing()
    }
 
    override func bindRx() {
        NotificationCenter.default.rx.notification(RefreshInvoice_Noti).takeUntil(self.rx.deallocated).subscribe(onNext: {noti in
            self.tableView.beginRefreshing()
            self.selectItems = Set<InvoiceModel>()
            self.calcularPrice()
        }).disposed(by: disposeBag)
    }
 
    @IBAction func invoiceTypeAction(_ sender: UIButton) {
        sender.isEnabled = false
        invoiceTypeView = CarBrandListView.show(self, offsetTop: 30, items: ["可开票订单","其它订单"], selectIndex: selectInvoiceIndex) { [weak self]index in
            guard let weakSelf = self else { return }
            weakSelf.selectInvoiceIndex = index
            weakSelf.optionBtn.isSelected = false
            weakSelf.invoiceTypeView = nil
            weakSelf.optionBtn.isEnabled = true
            switch index{
                case 0:
                    weakSelf.optionBtn.setTitle("可开票订单", for: .normal)
                    weakSelf.viewMoel.type.accept(1)
                case 1:
                    weakSelf.optionBtn.setTitle("其它订单", for: .normal)
                    weakSelf.viewMoel.type.accept(2)
                default:break
            }
            weakSelf.tableView.beginRefreshing()
            weakSelf.selectItems.removeAll()
            weakSelf.calcularPrice()
        } hiddenClouse: { [weak self] () in
            guard let weakSelf = self else { return }
            weakSelf.optionBtn.isSelected = false
            weakSelf.optionBtn.isEnabled = true
            weakSelf.invoiceTypeView = nil
        }
    }
 
    @objc func historyAction(){
        let vc = InvoiceHistoryViewController()
        yy_push(vc: vc)
    }
 
    private func calcularPrice(){
        var price:Double = 0
        var num:Int = 0
        selectItems.forEach { v in
            price += v.payMoney
            num += 1
        }
 
        selectInfoL.text = String(format: "共%ld笔订单,合计%.2lf元", num,price)
    }
 
    @IBAction func orderFilterAction(_ sender: UIButton) {
 
        if moreVC == nil{
            let vc = InvoiceMoreViewController()
            vc.viewMoel = viewMoel
            addChild(vc)
            vc.view.frame = CGRect(x: 0, y:0, width: ScreenWidth, height: self.view.height)
            self.view.addSubview(vc.view)
            vc.completeClouse = { [weak self] () in
                self?.selectItems.removeAll()
                self?.tableView.beginRefreshing()
                self?.calcularPrice()
            }
        }
    }
 
    @IBAction func selectAllAction(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        if sender.isSelected{
            for item in viewMoel.dataSource.value {
                selectItems.insert(item)
            }
        }else{
            selectItems.removeAll()
        }
        tableView.reloadData()
        calcularPrice()
    }
 
    @IBAction func nextStepAction(_ sender: UIButton) {
 
        guard selectItems.count != 0 else {
            alert(text: "请选择开票栏目");return
        }
 
        let inputVC = InvoiceInputViewController()
        inputVC.selectItems = selectItems
        yy_push(vc: inputVC)
    }
}
 
extension InvoiceViewController:UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let model = viewMoel.dataSource.value[indexPath.row]
        if selectItems.contains(model){
            selectItems.remove(model)
        }else{
            selectItems.insert(model)
        }
        tableView.reloadRows(at: [indexPath], with: .none)
 
        selectAllBtn.isSelected = viewMoel.dataSource.value.count == selectItems.count
        calcularPrice()
    }
}
 
extension InvoiceViewController:UITableViewDataSource{
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let model = viewMoel.dataSource.value[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "_InvoiceTCell") as! InvoiceTCell
        cell.setInvoiceModel(model)
        if selectItems.contains(model){
            cell.selectIcon.image = UIImage(named: "icon_select")
        }else{
            cell.selectIcon.image = UIImage(named: "icon_unselect")
        }
        return cell
    }
 
 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewMoel.dataSource.value.count
    }
}