Giter Club home page Giter Club logo

dots-ios's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dots-ios's Issues

Bill Title

Task description

Add a field for the user to add a bill title. Save the bill title.

A contextual menu with utility buttons and settings

User Story

As a user, I would like to see a menu with lots of buttons so that I can do more things to control the app.

Detailed Description

Provide a accessible menu that contains additional features like sort, group, except for the big ones like calculate and add bills.

Acceptance Criteria

  • Given tap on menu button, then menu view pops up
  • Given tap on back button, then go back to main view / dismiss menu view

Adaptive UI layout across devices.

User Story

As a user, I would like the app supports adaptive layout so that I could use it both on my iPhone and iPad.

Detailed Description

Change hard coded frame values to adaptive values so that the app looks nice both on iPhone and iPad with one set of code.

Acceptance Criteria

  • Given display on small screen, then the entries and cards are stacked vertically (single column)
  • Given display on larger screens, then the entries and cards take full use of the wide space (multiple columns)

[Note] - Attendees Order issue

Description

When adding a member to a group, a sort by ascending order must be executed at the same time. This does not affect the usage but still a problem, need to be fixed before finalize.

Bill Collection Visualization

User Story

As a user, I would like to have the app display the most recently added bill at a conspicuous place, so that I can easily confirm my addition of the bill without having to look at other older bills.

Detailed Description

Create a bill view that displays Bill Title, Bill Amount, Bill Date, and also indicates the Initiator and Participants using corresponding colors. The view should also offers an option to edit and delete.

Acceptance Criteria

  • Given bill date and bill title, then the bill should display the tile and date properly
  • Given proper data input, then the bill displays as a list on the home screen

Task List

  • Refer to Card View #10

CI/CD

User Story

As a developer, I would like to automate test and distribute so that I can save five more minutes for homework.

Detailed Description

Build a CI/CD Pipeline using Travis CI and Fastlane

Acceptance Criteria

  • Given push commit to github, then run tests on Travis CI, submit code coverage to Codecov.io, then publish documentation using Jazzy

Additional Features

Epic

Description and User Benefit:
Additional features are provided to users to filter their bills and perform some action to parts or all of their bills. These features include: group by initiator, mark all bills as paid, hide/unhide paid bills, clear all paid bills, and enable face ID. The first four features give user more flexibility with how to display and handle their bills. The last feature gives user more security in accessing the application.

User Stories

  • A contextual menu with utility buttons and settings #85
  • Group by initiator #71
  • Mark all bills as paid #72
  • Hide/unhide paid bills #73
  • Clear all paid bills #74
  • Enable face ID #75

Item Entry

User Story

As a user, I would like to add item entries to the bill and be able to select the participants and add the price of that item, so that I can record the details of the bill.

Detailed Description

This is a user interface that allows the user to enter specific items in a bill and assign corresponding participants. The user is expected to be able to type item name, dollar amount, as well as being able to select corresponding participants from the existing participants of the bill. Additionally, the user should be able to save everything he/she typed or selected after clicking a button; similarly, the user should also be able to exit out of this view by clicking another button without saving any changes.

Acceptance Criteria

  • Given user inputs of corresponding values and a click on a button, then all user inputs will be saved.
  • Given user clicking on particular participants' icons, then only those icons will be saved and mapped to the current entry.
  • Given user clicking on a button, then the user should be able to exit out of the view of entry insertion and go back to the previous view.

Task List

  • Implement 'EntryObject' class methods (Accessors) #46
  • Implement 'EntryObject' class methods (Mutators) #47

Bill Date

Task description

Add a field for the user to input the bill date. Save the bill date.

Card Content

Task description

Display the bill title, bill date, bill total, and participants of a bill.

Group and Sort by Initiator

Use a function that returns a new list of bills, all of which are grouped by initiators in ascending order of the initiators' indices. For bills corresponding to an initiator, they are ordered by date.

Mark all bills as paid

User Story

As a user, I would like to be able to mark all bills as paid at once, so that there is no need for me to do that one by one for each bill.

Detailed Description

Provide additional details and context.

Acceptance Criteria

  • Given press on button, then hide all paid bills

[DELETED/DUPLICATE] Display bill total

User Story

As a user, I would like to see the total of the bill clearly, so that I can know how much was spent and confirm that the item entries were added correctly.

Detailed Description

This total should be obtained by adding all of the item entries in the bill.

Group by initiator

User Story

As a user, I would like the app to be able to group all the bills by the bill initiators, so that I can have a better idea of what bills a certain initiator has paid for.

Detailed Description

There should be a button called "group by initiator" that toggles as the user clicks on it. When the button is on, all the bills are grouped by initiators and are ordered by the initiator indices. For the bills corresponding to a initiator, they are ordered by time/date.

Acceptance Criteria

  • Given a function called, then the displayed bills become grouped. #79

Enable Face ID

User Story

As a user, I would like to be able to log in using my Face ID, so that I can both login quickly and have my data protected.

Detailed Description

Use faceid / touchid to protect user's data

Acceptance Criteria

  • Given enable faceid, then Lock Screen every time the user exit the app
  • Given correct faceid, then unlock the main screen
  • Given incorrect faceid, then keep the blur layer on the main screen and prompt user to scan again

[DELETED/DUPLICATE] Color Deselection

User Story

As a user, I would like to have an easy way to deselect a color icon for either an initiator or a participant, so that I can correct myself in case I miss-clicked an icon.

Detailed Description

Provide additional details and context.

Acceptance Criteria

  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]

Group Member Initialization

Epic

Description and User Benefit:
The group member initialization is a feature that allows the user to initialize and keep track of group members. Each group member should have a corresponding icon. These group members correspond the group members on the current trip.

User Actions:

  • The user should be able to view the group members and their corresponding icons. This can be done by looking at the top part of the screen.
  • The user should be able to assign an icon to a new group member or remove the member from group. This can be done by clicking the specific icon and toggle icon's state.
  • The user should be able to add name to the icon. This can be done by long pressing the icon and input from keyboard.

User Stories

  • Adding Group Members #5
  • Number of Group Members #6
  • Color Deselection #7

Transition animation between views with gesture support

User Story

As a User, I would like to use gesture control so that I can change views smoothly.

Detailed Description

Create gesture recognition along with smooth hero animation.

Acceptance Criteria

  • Given swipe/pull down BillDetailView, then dismiss view
  • Given Tap on bill/card view, then BillDetailView pops up

Number of Group Members

User Story

As a user, I would like to have the App indicate the number of group members after I added all of them, so that I can confirm my selections.

Detailed Description

Provide additional details and context.

Acceptance Criteria

  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]

Settle all bills (UI Not Yet Implemented)

User Story

As a user, I would like the app to have a button that will show me the total of who owes who how much, so I can see how each person in the group should pay others back.

Detailed Description

This function is the core feature of the app, with a single click, the app collects all the bill and bill entry information input from the user, then calculate the amount of money that a person should pay another. The result should be displayed in a clean and simple view.

Acceptance Criteria

  • Given click on a button, then a view pops up with the calculation result
  • Given swipe or close on the result view, then the view dismisses
  • When some bills are marked as PAID, the app should no longer calculate them

Task List

  • func settleBills() in DotsData class #39
  • func settleBill() in BillObject class #65

Clear all paid bills

User Story

As a user, I would like to remove all the bills that are already paid off, so that I can focus on the ones not yet paid/finished.

Detailed Description

Implement a button where user can remove all paid bills with one click

Acceptance Criteria

  • Given click on clear button, then pop up a window to prompt user whether to remove all paid bills
  • Given click on yes, then remove all paid bills
  • Given click on no, then dismiss window

Tasks

  • Added mutating func clearPaidBill() in DotsData class

Initiator/Participants of a Bill

User Story

As a user, I would like to have the App provide information to let me choose designated bill initiators and participants easily, so that I can assign bills to potentially different portions of people in my group.

Detailed Description

Upon opening a new bill, the user should be able to choose an initiator, which is the person that paid for the bill. The users should also be able to choose the participants, which are all the people that would be responsible for the bill. The participants and initiator of the bill should be visually clear and distinguishable for the user.

Acceptance Criteria

  • Given selecting an icon, then that participant is selected to be included in the bill.
  • Given deselecting a selected icon, then the participant is removed from the bill.
  • Given opening a bill, then users should be able to clearly tell who is the initiator and who are the participants.

Task List

  • Icon Selection and Deselection #7
  • Initiator/Participants Visual Differentiation #13
  • mutating func setInitiator() in BillObject class #43
  • mutating func setParticipants() in BillObject class #43
  • mutating func removeParticipant() in BillObject class #43

Icon Selection and Deselection

Task Description

Select an icon upon user click. De-select an icon upon user click if the icon has already been selected.

Documentation

User Story

As a User, I would like to look at the documentation so that I can learn about the code.

Detailed Description

Generate a documentation for this project. Create comment blocks in the documentation format for jazzy to generate docs automatically.

Acceptance Criteria

  • Given clicking on the documentation link, then the website of documentation pops up.

Unit Test

User Story

As a product manager, I would like the app is well tested so that the main functionality can work as expected before release.

Detailed Description

Create test cases for the unit test.

Acceptance Criteria

  • Given build with test scheme, then the Unit Test Classes are went through
  • Given unit test, then all tests pass without failure

Bill Number Visualization

User Story

As a user, I would like a list view of all bills so that I can have a general picture of the bills I have.

Detailed Description

Provide additional details and context.

Acceptance Criteria

  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]

[Removed Feature] Optional label for dots

User Story

As a user, I would like to label dots so that I can better manage group member with corresponding colored dots.

Detailed Description

With large amount of people within the group, it would be handy if the app could allow users to label the dots and view the names whenever needed.

Acceptance Criteria

  • Given long press the dot in selection menu, then a textfield pops up awaiting user input (if no label exists)
  • Given long press the dot in selection menu, then the previous label appears

Clear All Bills

User Story

As a user, I would like the app to have a button that can remove all bill entries from the home view.

Detailed Description

Give user the ability to remove all bills or all paid bills.

duplicated with #74

Acceptance Criteria

  • Given a remove "Paid" checkbox clicked, then toggle remove paid items only boolean
  • Given clicking on clear all button, then remove all bill objects

Tasks

  • mutating func clearBills() in DotsData class

Hide/Unhide paid bills

User Story

As a user, I would like to choose to see the unpaid bills only, so that I do not need to waste my time looking at bills already paid off.

Detailed Description

Sometimes, the user might wish to unsee some paid bills, we need to offer them an option to hide the bills.

Acceptance Criteria

  • Given click on a hide/unhide button, then Bills are hidden correspondingly

Add / Delete Bills

User Story

As a User, I would like to add and delete bills so that I can manage all bills for the split calculation.

Detailed Description

There needs to be a way for users to add, rearrange, delete the bill objects on the home page. When adding a bill, some view should appear that prompts the user to enter bill information.

Acceptance Criteria

  • ➕Given Clicking some add button, then a new bill view pops up
  • 📄Given Clicking on the edit button, then Bills are rearrangeable
  • 🗑Given Swipe to delete or some delete button in the bill view, then remove the corresponding bill correctly

Task List

  • Bill Title #16
  • Bill Date #17
  • Implement 'BillObject' class methods (Accessors) #42
  • Implement 'BillObject' class methods (Mutators) #43

Bills Management - add and deletion

Epic

Description and User Benefit:
The bills management is a feature that allows users to add and delete bills. It allows the user to add details to a bill and assign corresponding group members to each new bill and each item entry in the bill.

User Actions:

  • The user should be able to add a new bill. This can be done by clicking on a "+" icon.
  • The user should be able to assign group members to the bill. This can be done by clicking on the corresponding icons of the group members.
  • The user should be able to add details to a new bill. This can be done by entering the corresponding information (title, date, etc.) after selecting the members.
  • The user should be able to add item entries to a bill. This can be done by selecting an empty line on the bill and entering the corresponding item, price, and selecting the corresponding members.

User Stories

  • Initiator/Participants of a Bill #12
  • Add/Delete Bill #29
  • Item Entry #18

Smooth and flawless transition in card view

User Story

As a user, I would like the views could have a nice transition so that I can have better experience.

Detailed Description

Provide animations that are responsive to micro interaction. Fix .opacity transition issue caused by matchedGeometryEffect.

Acceptance Criteria

  • Given long pressing on the card, then card view scales down a bit
  • Given release long press/tap, then card view transition from small card to bill detail view

Distribute to the App Store

User Story

As a user, I would like the app is distributed on the App Store so that I can easily install the app.

Detailed Description

Distribute the app to the App Store.

Adding Group Members

User Story

As a user, I would like to add group members before I add any receipts without the hassle of having to write down their names one by one, so that I can save my time and privacy.

Detailed Description

Provide additional details and context.

Acceptance Criteria

  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]
  • Given [Condition], then [Expected Result]

UI Test

Story

As a developer, I wish to implement a sample UI activity workflow so that I can make sure the app works as expected.

Detail

Create UI Test Classes and automate UI Testing

Tasks

  • Given test scheme, then run UI test cases

Customized entry list view

User Story

As a user, I would like the app can deliver the entries of a bill in a nice layout with gesture control so that I am able to view all entries smoothly and also being able to remove entries at the same time.

Detailed Description

The original List from SwiftUI does not support customized view based on the current UI design, so we need to create a customized entry list view, with proper gesture control, like swipe to delete.

Acceptance Criteria

  • Given swipe left, then delete button pops up
  • Given tapping on the delete button, then the entry item view disappears and also removed from Bill.entries

"Excelsior Package" (UI detail polishing)

Epic Description

As a USER, I would like the app to have smooth transition and UI size/position accommodation so that I can have a better user experience.

Detailed Description

Deliver the best UI/UX we could ever make.

Related stories

  • Customized entry list view, with proper gesture control. #48
  • Keyboard avoidance
  • Smooth and flawless transition #54
  • Adaptive UI layout across devices. #56

Implement `BillObject` class methods (Mutators)

Implement mutator methods inside Models/BillObject.swift

TODO

  • mutating func clearEntries()
  • mutating func setTitle(newTitle: String)
  • mutating func setDate(date: Date)
  • mutating func setTaxRate(tax: Double)
  • mutating func setInitiator(initiator: Int)
  • mutating func setParticipants(participants: [Int])
  • mutating func removeParticipant(at: Int)
  • mutating func addNewEntry(entry: EntryObject)
  • mutating func addNewEntry(entryTitle: String, participants: [Int], value: Double, amount: Int, withTax: Bool)
  • mutating func removeEntry(at: Int)

Bill Collections

Epic

Description and User Benefit:
The bill collections allows users to navigate between bills to check for details, including bill title, bill date, bill total, and members who participated in the bill. This will allow the user to see clearly their purchase history for the current trip. We also want users to be able to see who owe who how much money based on the accumulated bills. This allows the user to be clear about how much each member should pay back another member. In addition, we want users to be able to clear all the bills.

User Actions:

  • The user should be able to see all the bills.
  • The user should be able to see the details of any bill. This can be done by clicking on the target bill.
  • The user should be able to see the overall results, of which member should pay back how much money to another member. This can be done by clicking the "View Total" button.
  • The user should be able to clear all the bills. This can be done by clicking the "Clear" button.

User Stories

  • Bill Collection Visualization #9
  • Clear All Bills #11
  • See Settlement #25

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.