Wednesday, 1 April 2015

uibutton holds section index and row index


import UIKit

class CustomerOrdersViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    var theShipments:[Shipment]?
    
    var theOrders: [Order]?
    
    var theCustomer: Customer!

    @IBOutlet weak var name: UILabel!
    @IBOutlet weak var tellNumber: UILabel!
    @IBOutlet weak var postCode: UILabel!
    @IBOutlet weak var parcelListTableView: UITableView!
    //MARK: -collect/uncollect
    @IBAction func uncollectedFn(sender: AnyObject) {
        if let shipments = theShipments{
            for var index = 0; index < shipments.count; ++index {
                if(shipments[index].isEnabled){
                    unCollectShipmentAtIndex(index)
                }
            }
        }
    }
    
    @IBAction func markASCollectedFn(sender: AnyObject) {
        if let shipments = theShipments{
            for var index = 0; index < shipments.count; ++index {
                if(shipments[index].isEnabled){
                    collectShipmentAtIndex(index)
                }
            }
        }
    }
    
    func collectShipmentAtIndex(index:Int){
        KVNProgress.showWithStatus("updating Orders...")
        var collectShipment = self.theShipments![index]
        collectShipment.status = Shipment.STATUS_COLLECTED
        updateShipmentStatus(collectShipment,{
            KVNProgress.dismiss();
            self.theShipments!.removeAtIndex(index)
            dispatch_async(dispatch_get_main_queue(),{
                self.parcelListTableView.reloadData()
            })
            },{nsError in
                collectShipment.status = Shipment.STATUS_READY_TO_COLLECT
                KVNProgress.dismiss();
                KVNProgress.showErrorWithStatus(nsError.localizedDescription);
        });
    }

    func unCollectShipmentAtIndex(index:Int){
        KVNProgress.showWithStatus("updating Orders...")
        var collectShipment = self.theShipments![index]
        collectShipment.status = Shipment.STATUS_UNCOLLECTED
        updateShipmentStatus(collectShipment,{
            KVNProgress.dismiss();
            self.theShipments!.removeAtIndex(index)
            dispatch_async(dispatch_get_main_queue(),{
                self.parcelListTableView.reloadData()
            })
            },{nsError in
                collectShipment.status = Shipment.STATUS_READY_TO_COLLECT 
                KVNProgress.dismiss();
                KVNProgress.showErrorWithStatus(nsError.localizedDescription);
        });
    }
    //MARK: -Init data and populate
    func populateWithCustomer(customer:Customer){
        theCustomer = customer;
//        self.populateTheCustomer()
        getOrderByCustomerId(theCustomer.customerId);
    }
    
    func getOrderByCustomerId(customerId: String) {
        KVNProgress.showWithStatus("Loading Orders...")
        getOrdersByCustomerID(customerId,{
            self.theOrders = $0
            self.parcelListTableView.reloadData()
            KVNProgress.dismiss();
            },{nsError in
                KVNProgress.dismiss();
                KVNProgress.showErrorWithStatus(nsError.localizedDescription);
        })
        
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        populateTheCustomer()
    }
    
    func populateTheCustomer(){
        name.text = "\(theCustomer.lastName), \(theCustomer.firstName)"
        let tellCount = (theCustomer.mobilePhone as NSString).length
        tellNumber.text = tellCount != 0 ? theCustomer.mobilePhone : theCustomer.otherPhone
        postCode.text = "\(theCustomer.postcode)"
    }
    
    
    //MARK: UITableViewDataSource functions
    func numberOfSectionsInTableView(tableView: UITableView) -> Int{
        if let orders = theOrders{
            return orders.count
        }else{
            return 0
        }
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let orders = theOrders{
           return orders[section].parcels.count
        }else{
            return 0
        }
    }
  
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier(cel_ORDER) as? OrderTableViewCell
        if (cell == nil) {
            cell = OrderTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cel_ORDER)
        }
        if let orders = theOrders{
            var globalIndex = 0
            var i:Int = 0
            var j:Int = 0
            for i = 0;i<=indexPath.section;i++ {
                for j=0;j<orders[i].parcels.count;j++ {
                    if(i == indexPath.section && j  == indexPath.row){
                        i = indexPath.section
                        break
                    }else{
                        globalIndex++
                    }
                }
                
            }
            cell?.populateWithParcel(orders[indexPath.section].parcels[indexPath.row],index: globalIndex)
            if (orders[indexPath.section].parcels[indexPath.row].isEnabled as Bool) {
                cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
            }
            else {
                cell?.accessoryType = UITableViewCellAccessoryType.None
            }
        }
        cell?.layoutMargins = UIEdgeInsetsZero;
        cell?.preservesSuperviewLayoutMargins = false
        cell?.selectionStyle = .None
        tableView.separatorColor = UIColorFromRGB(0xdc5b26)
        tableView.separatorInset = UIEdgeInsetsZero
        
        return cell!
    }
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if let cell = tableView.cellForRowAtIndexPath(indexPath) {
            if cell.accessoryType == .Checkmark {
                cell.accessoryType = .None
                theShipments![indexPath.row].isEnabled = false
            }
            else {
                cell.accessoryType = .Checkmark
                theShipments![indexPath.row].isEnabled = true
            }
        }
    }
    
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        var sectionHeaderView = UIView(frame:CGRectMake(0, 0, tableView.frame.size.width, 160.0))
        sectionHeaderView.backgroundColor = UIColor.grayColor()
        var sectionHeaderLabel = UILabel(frame:CGRectMake(10, 0, tableView.frame.size.width, 40.0))
        sectionHeaderView.addSubview(sectionHeaderLabel)
        sectionHeaderLabel.adjustsFontSizeToFitWidth = false
        
        if let shipments = theShipments{
            if(shipments.count > 0){
                sectionHeaderLabel.text = theShipments?[0].orderId
            }else{
                sectionHeaderLabel.text = ""
            }
        }else{
            sectionHeaderLabel.text = ""
        }
        sectionHeaderLabel.textAlignment = .Center
        sectionHeaderLabel.font = UIFont(name: f_LONDON_BOLD, size: 20)
        return sectionHeaderView
    }
    
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 40.0
    }
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == seg_TO_CUSTOMER_PARCELS_DETAIL {
            var globalIndex:Int = (sender as UIButton).tag
            if let orders = theOrders{
                var row = 0
                var section = 0
                var tempIndex = 0
                var i:Int = 0
                var j:Int = 0
                for i = 0;i<orders.count;i++ {
                    for j=0;j<orders[i].parcels.count;j++ {
                        if(tempIndex == globalIndex){
                            row = j
                            section = i
                            i = orders.count
                            break
                        }
                        tempIndex++
                    }
                }
                (segue.destinationViewController as ParcelViewController).populateWithParcel(orders[section].parcels[row])
            }
        }
    }
}




No comments:

Post a comment