Skip to content

Commit

Permalink
Merge pull request #8 from novinfard/issue-with-budget-saving
Browse files Browse the repository at this point in the history
Fixed the issue with budget saving
  • Loading branch information
novinfard committed Oct 27, 2019
2 parents bb71887 + e81ff6e commit e636467
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 45 deletions.
2 changes: 1 addition & 1 deletion SmartWallet.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@
CD152F99231F0A090042A6E8 /* Extensions */,
CD0246B52076975700E7C705 /* Cells */,
CD52CDF22337D2E8008A1498 /* Views */,
CD0F711D2014D379000B2BCD /* Main.storyboard */,
CD31509420531661001AD682 /* Style.swift */,
CD315097205316CF001AD682 /* Style+MyApp.swift */,
);
Expand All @@ -284,7 +285,6 @@
CD2E553A2046D3FF00976EAA /* AddCategoryViewController.swift */,
CD397BCF207AC3B400103E5C /* ChooseCurrencyTableViewController.swift */,
CDD960182093F10600254F9F /* SplashViewController.swift */,
CD0F711D2014D379000B2BCD /* Main.storyboard */,
);
path = Controllers;
sourceTree = "<group>";
Expand Down
2 changes: 1 addition & 1 deletion SmartWallet/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<key>CFBundleShortVersionString</key>
<string>1.1</string>
<key>CFBundleVersion</key>
<string>5</string>
<string>6</string>
<key>Fabric</key>
<dict>
<key>APIKey</key>
Expand Down
File renamed without changes.
6 changes: 6 additions & 0 deletions SmartWallet/UI/Cells/BudgetTableViewCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,17 @@

import UIKit

protocol BudgetFieldDelegate: AnyObject {
func didEndEditing(cell: BudgetTableViewCell)
}

class BudgetTableViewCell: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var categoryLabel: UILabel!
@IBOutlet weak var budgetAmount: UITextField!
@IBOutlet weak var amountLabel: UILabel!
@IBOutlet weak var budgetPercentage: UIProgressView!
weak var budgetDelegate: BudgetFieldDelegate?

override func awakeFromNib() {
super.awakeFromNib()
Expand All @@ -33,6 +38,7 @@ class BudgetTableViewCell: UITableViewCell, UITextFieldDelegate {

func textFieldDidEndEditing(_ textField: UITextField) {
setSelected(false, animated: true)
self.budgetDelegate?.didEndEditing(cell: self)
}

override func setSelected(_ selected: Bool, animated: Bool) {
Expand Down
74 changes: 31 additions & 43 deletions SmartWallet/UI/Controllers/BudgetViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,8 @@ class BudgetViewController: UITableViewController, NSFetchedResultsControllerDel
}

@IBAction func editPressed(_ sender: Any) {

if editingMode == true {
// save the data
saveData()
loadData()
editingEnd()
} else {
editingBegin()
Expand All @@ -55,19 +53,17 @@ class BudgetViewController: UITableViewController, NSFetchedResultsControllerDel

func loadData() {
// prepare result controller
if fetchedResultsController == nil {
let request = Categories.createFetchRequest()
let sort = NSSortDescriptor(key: "sortId", ascending: false)
request.sortDescriptors = [sort]
request.fetchBatchSize = 20

fetchedResultsController = NSFetchedResultsController(
fetchRequest: request,
managedObjectContext: Facade.share.model.container.viewContext,
sectionNameKeyPath: "direction",
cacheName: nil)
fetchedResultsController.delegate = self
}
let request = Categories.createFetchRequest()
let sort = NSSortDescriptor(key: "sortId", ascending: false)
request.sortDescriptors = [sort]
request.fetchBatchSize = 20

fetchedResultsController = NSFetchedResultsController(
fetchRequest: request,
managedObjectContext: Facade.share.model.container.viewContext,
sectionNameKeyPath: "direction",
cacheName: nil)
fetchedResultsController.delegate = self

let predicate = NSPredicate(format: "direction = %d", -1)
fetchedResultsController.fetchRequest.predicate = predicate
Expand All @@ -84,35 +80,19 @@ class BudgetViewController: UITableViewController, NSFetchedResultsControllerDel
} catch {
print("Fetch failed")
}

}

func loadFooter() {
let footerView: UIView = UIView.init(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 45))
let footerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 45))
footerView.backgroundColor = UIColor.white

let labelView: UILabel = UILabel.init(frame: CGRect(x: 0, y: 5, width: tableView.frame.width, height: 30))
let labelView = UILabel(frame: CGRect(x: 0, y: 5, width: tableView.frame.width, height: 30))
labelView.textAlignment = .center
labelView.text = "Total: \(NSLocale.defaultCurrency)\(totalBudget.clean)"

footerView.addSubview(labelView)
tableView.tableFooterView = footerView
}

func saveData() {
for cell in tableView.visibleCells as! [BudgetTableViewCell] {
let category = fetchedResultsController.object(at: tableView.indexPath(for: cell)!)
if let amount = cell.budgetAmount.text, amount != "" {
category.budget = amount.getDoubleFromLocal()
} else {
category.budget = 0.0
}
}

Facade.share.model.saveContext()

loadData()
}
}

extension BudgetViewController {
Expand All @@ -127,6 +107,7 @@ extension BudgetViewController {

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "budgetCell", for: indexPath) as! BudgetTableViewCell
cell.budgetDelegate = self
let category = fetchedResultsController.object(at: indexPath)
cell.categoryLabel.text = category.name
cell.amountLabel.text = NSLocale.defaultCurrency
Expand All @@ -146,19 +127,26 @@ extension BudgetViewController {
cell.budgetPercentage.progress = 0
}

if editingMode {
cell.budgetAmount.isEnabled = true
} else {
cell.budgetAmount.isEnabled = false
}
cell.budgetAmount.isEnabled = editingMode

return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if editingMode {
let cell = tableView.dequeueReusableCell(withIdentifier: "budgetCell", for: indexPath) as! BudgetTableViewCell
cell.makeFirstResponder()
}
guard editingMode else { return }
let cell = tableView.dequeueReusableCell(withIdentifier: "budgetCell", for: indexPath) as? BudgetTableViewCell
cell?.makeFirstResponder()
}
}

extension BudgetViewController: BudgetFieldDelegate {
func didEndEditing(cell: BudgetTableViewCell) {
guard let indexPath = tableView.indexPath(for: cell) else { return }

let category = fetchedResultsController.object(at: indexPath)
category.budget = cell.budgetAmount.text?.getDoubleFromLocal() ?? 0
Facade.share.model.saveContext()

self.loadData()
}
}

0 comments on commit e636467

Please sign in to comment.