Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed the issue with budget saving #8

Merged
merged 1 commit into from
Oct 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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()
}
}