Code Monkey home page Code Monkey logo

orderbuddy's People

Contributors

robkap94 avatar

Watchers

 avatar

orderbuddy's Issues

ETA timing for orders

To ensure, that customer will be aware about potential ETA - we need to create such an option, to be set up, in Manager View + countdown next to the order's position in Queue View.

Hence, we need to establish:

  • Option to set up ETA, during creation of an order,
  • Option to change ETA, during editing order's details,
  • Field, next to order's ID, which will be countdown field visible for the customers.

Create dev branch

As we have created "test" branch, we need to create also "dev" branch.

Therefore:

  • All of the work will be done on "dev" branch + all of the additional "feature-branches" going out from dev,
  • Then it will go for testing into "test" branch,
  • Eventually, it will go to the "main" branch where code will be fully operational and without bugs. The only difference here is that main will not have any unit tests.

TODO:

  • Create "dev" branch,
  • Ensure that "dev" branch is copying from the "test" all of the unit-tests.

Establish SQL Database

We need to create real database, not only text one - which was for testing purposes only.
Hence, I have cancelled #19 Issue - we should not create binary database.

Better idea is to utilize SQLite and create SQL database, this is quite light and easy way for such a small app and SQLite will be the best one for this job.

Therefore:

  • Establish SQL database,
  • Prepare "Create DB" function,
  • Prepare "Insert Table" function,
  • Prepare dummy data,
  • Prepare Category class, (Will be continued in #52 )
  • Prepare "Load DB" function,
  • Prepare "Save DB" function, (Consider whether it is required or whether just simple INSERT is enough during creation of Order/Category)
  • Prepare dictionary-class with SQL expressions (constants) OR constants at the top of the class,
  • Implement SQL database, by utilizing specified expression's constants to operate with db,
  • Clean up the code after implementation,
  • Ensure to start #52 right after this feature (as there are a lot of TODOs, in the code, related to #52 ).

Establish 2nd window - Order Window

As a second step, we need to establish 2nd window which will display orders in future.

  • Code new stage for second window,
  • Rename "main-view" into "manager-view",
  • Make initial position of the "manager-view" placed more to the left-hand side of the screen,
  • Rename "second-view" into "queue-view",
  • Make initial position of the "second-view" placed more to the right-hand side of the screen,
  • Title - "Order Buddy - Queue View",
  • Resolution - (Recommended 480x640, vertical).

Prepare "Order" class

Prepare basic class for an orders

  • Create class,
  • Design and code initial fields,
  • Prepare constructor,
  • Establish getters & setters.

Please ensure that "Order" class should contain:

  • Title (Only in the pre-alpha version),
  • Auto-ID (incremented automatically),
  • Category,
  • Price,
  • Description,
  • Date of order (aka date of creation),
  • Date of deliver (aka date of closure).

Find additional tester

It's hard to work alone and actually it's tough to test code which you know. But it's good to have additional backup by someone who would help you!

Therefore:

  • Find additional person, who will be manual tester for beta version of the program,
  • Ensure that this person is aware "how to test", in case of knowledge lack - help to learn how-to-test (Seriously, you also need to learn it anyway :) ),
  • Introduce this person into the project,
  • Create additional documentation for testing purposes/methods,
  • Create tasks for this person.
  • Ensure that, both of you, will test app after each handled issue,
  • Create "About" in ReadMe and add there tester person,
  • Update "About" tab (in app) and add there tester person.

Good luck!

Set up unit tests

Need to set up initial unit tests

  • Create separated "test" branch where you will contain all of the tests,
  • Create all of the unit tests for all classes, hence:
  • Order class tests,
  • OrderData tests,
  • Delete manual tests (souts).

Settings in menu bar

We need to create settings window which will be activated from the drop-down menu at the top of the program.

  • Create Settings option in MenuBar,
  • Create Settings window,
  • Implement option to change language (#25).

Auto-Publish of order

We need to implement checkbox, into Order create window, with possibility to select whether order should be published immediately after creation.
This may be something which can speed up the work, when i.e. there are rush hours.

  • Implement checkbox "Publish, on queue, after order's creation" into Order Creation dialogue window.

Establish order details pane in ManagerView

We need to establish order details, after selecting Order on the ListView, in the right hand side of the ManagerView.

  • Establish FXML of this pane,
  • Implement selection of the order (Consider to rebuild list, on the ListView into HashMap [faster and more efficient] or utilize current observableArrayList),
  • Link details of order, from selected order, to the Details Pane.

Order final summary

When order will be moved into step "delivered", it's good to show summary of "order-life".

Therefore, we need to create:

  • Summary pane, which will be disabled until delivering order,
  • All of the fields (Time spent on handling order in total, time per each particular step).

This would be good thing for future QA checks regarding service delivery.

Prepare basic design for an app

Need to prepare some really basic design for app's design,

  • Prepare some basic draft of theme (colours) for an app,
  • Set up basic theme in the app.

Delete button

We need to create "Delete button", hence:

  • Establish functional "Delete button",
  • Ensure that it deletes only selected Order,
  • Delete button should be disabled till the moment, when some order is selected - Functionality is available after selecting order from the list,
  • After pressing "Delete button", dialog window (pop-up) should appear with confirmation "Do you want to delete order "id X: title"? (Name schema used in CellFactory of ListView to show names of orders),
  • After deleting order, it should automatically save database.

Database auto-backup

As we have stable database, we need to prepare auto-backups of it. Hence:

  • Prepare auto-backup on daily basis (Like in details below)
  • During first run, of an app, in particular day - it's creating copy of loaded db as a "backup_dd_mm_yyyy",
  • It also checks, on each run of an app, whether there is already backup file with this particular date (this point is also the checker's logic of first point),
  • It is saved in "db/backup" dir,
  • Prepare option (in menu bar?) to change occurence into one of below options (i.e. by RADIO input selector):
  • Daily
  • Weekly
  • Monthly
  • Prepare dialog window, which informs about fact of creating backup with the name of file as a "backup_dd_mm_yyyy"
  • Also, ensure that this dialog will have blocked "OK" button for 1-2 secs, so user can read what is in the dialog, instead of accidentally pressing "OK".

Set up basic database workflow of orders

To ensure that all functionality of pre-alpha version is correct, we need to establish database.

This task is straight way to, almost, finalize pre-alpha version and it's basic functionality.

Hence, we will utilize raw (and plain) text file as a database.

Therefore:

  • Create new dialog FXML,
  • Create new dialog Controller,
  • Configure "Create" button in Manager View to open creation dialog window,
  • Create method, in dialog controller, to create object,
  • Create text file,
  • Create method in "Order" to pass object details into text file "database",
  • Ensure that ListView is updated, and populated, each time after creating new Order object,
  • on init() of ManagerController, ensure that it is loading the db text file,
  • on init() of ManagerController, create List or ObservableList which will be populated by objects from db text file,
  • on stop() (probably it's stop?) of ManagerController, ensure that it is saving the db text file.

Adjust names of files

We need to change names of files, from initial ones. This is common thing after establishing new JavaFX project, hence:

  • Change "HelloApplication" into "MainApplication",
  • Change "HelloController" into "MainController",
  • Change "hello-view" into "main-view",
  • OPTIONAL/Ad-Hoc - Change all files with initial names,
  • Final testing.

Show in queue button

We need to implement "Show in queue button". Therefore:

  • Implement functionality of show in queue button,
  • Show in queue button should be disabled till the moment, when some order is selected - Functionality is available after selecting order from the list,
  • It shows, selected, order in the Queue Window,
  • Next to the order, in the order's list (Manager's View -> ListView), should be additional mark (tick or "Q" letter) to mark which Orders are showed in the Queue,
  • Add additional button -> "Take out from queue" (Place it below Show in queue) to create possibility of taking order out of view (so there will be two options to take out order from view -> Close order or press this button). Ensure that all of the above rules, also apply for this new button.

Currency in prices

We need to boost price fields. Hence, we need to add currency sign. Tasks are simple:

  • Establish field to select currency in Settings (in #26 ),
  • Utilize selected currency to be shown at the end of price field.

CI/CD

It's time to establish functional CI/CD for this project.

  • Establish CI
  • Establish CD
  • Double-check whether all is working and it's building/releasing properly.

Log system

For proper troubleshooting and to track system's - we need to implement log system (log folder with one log per day)

  • implement log system (i.e. app start, app end, order added, cat added, modified order etc.),
  • implement error log (i.e. crash, wrongly added order, sql connection issues etc.),
  • ensure that there is one log file per day with the timestamps inside,
  • utilize .log extension for text-type files for logs,
  • implement log reader, accessible from menu bar as an separate option.

Category Manager

As we already have Category class (for orders), we need to create small pop-up window which will be Category Manager.
Hence, it is going to be list with simple buttons (add, edit, delete).

  • Create pop-up window for Category Manager in the toolbar,
  • Establish ObservableList of categories which will be populated by loaded categories from db (addCategory in loadedDB),
  • Establish button add category,
  • Establish add functionality with similar method as it was done with orders in #35 ,
  • Establish button edit category,
  • Establish button delete category,
  • Ensure that in the "Create Order" you can choose categories from the dropdown list, user should not type it manually since now (AddOrderDialogController),
  • Ensure that above is also applied for the Edit Order. (Will be applied in feature #40 )

Additional tasks:

  • Adjust jUnit tests for Feature #35 ,
  • Change project's "Window" class into "AppWindow" to not collide with JavaFX's lib "Window" class,
  • From commentary below, check whether it's good idea, or not, to leave duplicated code.

Make a final review of pre-alpha milestone

Okay - It's time to wrap-up everything in this milestone.

I need to ensure, whether there are still any (really) basic things, which should be done in this release. Hence:

  • Check whether all of the issues, for this milestone, has been done properly,
  • Whether app is actually working quite well,
  • Whether all of the existing code is commented properly,
  • Whether all of the testing souts are deleted,
  • Whether there are any additional issues,
  • Whether current code can be optimized (Even create additional issue for this, if necessary),
  • Whether there are any redundant comments,
  • Double-confirm above, and close the milestone.

Good luck!

Process steps history

As a good quality check for potential QA of delivering services, it's good to create process steps for Order Pane.
Such a steps would be changed, by an employee, during order handling. Therefore, the steps are like in below:

  1. Collected order,
  2. Order in preparation,
  3. Ready to be delivered,
  4. Order delivered.

That's why, we need to create:

  • Steps class,
  • Create steps/process ListView in order pane,
  • Create button and dropdown list to select particular step and set it,
  • Display process with such an template: Time (when changed for this particular step) - Name of step.
  • Progress bar of handling order, based on steps (4 steps),
  • Current status of an order, in Order View.

Database with binary objects

We need to create actual database, in file.
Hence we can create it for binary objects of orders (in .dat extension) or in SQL database (SQLite).

Establish correct date of order and date of delivery

This is small thing which is still missing in the Order's creation and details. Hence:

  • Establish correct dateOfOrder field,
  • Establish correct dateOfDelivery field,
  • Ensure that it is utilizing ISO8601 notation for dates (hence, we can utilize Strings here),
  • Double check whether the whole program has implemented correct dates,
  • Double check whether SQL is acquiring correct dates (with notations) and whether import is correctly read.

Description field issue

During checks, I have found out that, when you are pressing enter, to break a line and type second sentence below. It's crashing DB.

Therefore, we need to fix this bug:

  • Analyze the bug,
  • Find the potential solution - Consider utilizing StringBuilder.

Please notice that this bug can be, potentially, fixed after introducing SQL database. Unfortunately, current database takes line-breaks as an another record (another order).

Set up initial icon for the window

We need to set up an initial icon for the Order Buddy:

  • Come up with some basic idea? Maybe just a stickman (torso and head) with the list next to it?
  • Prepare graphic for an icon,
  • Load an icon into project,
  • Set up icon for manager window,
  • Set up icon for queue window.

SQL injection security

We need to establish security system against SQL injection. I.e. when someone is providing with details of order, such a details may contain SQL code which can be used to inject SQL command.

  • implement security against SQL injection,
  • Test efficiency of this system.

Language file

It's not good to keep strings values somewhere in the code. Therefore, we need to create language file, class which will contain all of the phrases used in the program.

This is good opportunity to make multi-language app just by adding new Lang file + language position in settings.

TIP(?): Lang Interface with all of the consts (final) and classes LangPL or LangEN which implement this interface.

  • Create Language interface with all of the consts for words/sentences,
  • Create LanguageEN class which implements interface Language and fill it with English words,
  • Create LanguagePL class which implements interface Language and fill it with Polish (translated) words,
  • Change all of hard-coded words/sentences into consts from LanguageEN,
  • Create MenuCategory "Languages" and list of current languages available to be chosen. (This particular task needs to be moved to the settings during task #26).

Edit Button

We need to implement "Edit Button". Therefore:

  • Implement functionality of edit button,
  • Edit button should be disabled till the moment, when some order is selected - Functionality is available after selecting order from the list,
  • Edit function will be possible by pop-up dialog window with current details of selected order,
  • Edit function should be blocked in the order's details pane (on the right side of the Manager's view), therefore fields should be blocked from editing,
  • After editing, this should be saved and immediately updated in db (like during creation of the order, db is saved).
  • Ensure that it is similar to add order when it comes to the i.e. dropdown list for categories.

Close sequence

Ensure that after closing ManagerView, it closes also QueueView.
The same with QueueView, which closes then ManagerView.

  • ManagerView closes QueueView,
  • QueueView closes ManagerView.
  • Confirmation dialog, which asks user whether he wants "to really close an app".
  • Rule above should be also applied to the MenuItem File->Close.

About page

Each program has its own creator - Order Buddy needs the same!

Create "About" pop-up which appears after selecting correct option in top bar menu of program.

Prepare basic GUI interface

Need to set up basic GUI interface, nothing fancy, just a simple interface for initial testing.

Please ensure that it needs to have:

  • Simple list of order's objects (left-hand side of the manager's window),
  • Order details (right-hand side of the manager's window),
  • Create Order button,
  • Edit Order button, (Future release note: It should be active after selecting position from the list),
  • Delete Order button, (Future release note: It should be active after selecting position from the list),
  • Show in Queue button, (Future release note: It should automatically appear, in the queue, after creation).
  • List of orders in Queue View

Close button

To quickly close the program, there is a requirement to create close button. Use top bar menu to implement it.

Error pop-ups

We need to change all of the errors, catches or just any exceptions from SOUTs or even printstacks into error pop-ups.
It would be good to print error message in the error pop-up window.

This is crucial for professional app :)

Set up main window's properties

Need to set up main window's (order manager) properties, hence:

  • Title - "Order Buddy - Manager View",
  • Resolution (Recommended 800x600 for the window).

Establish correction checkers for data

We need to create checkers, which will inform user that data is invalid (i.e. double has been typed with comma (,) instead of dot (.) or we can create something to change comma into dot when typed).

Also other checkers, like title/category with weird signs, date is in incorrect format (field should be blocked and only available thing should be small callendar icon to select it from date picker).
For description, maybe 255 sign limit?

This should be applied for creation and edition.

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.