MilenTecle / Inventory-Manager

0 stars 1 forks source link

Inventory Manager

The Inventory Manager app is built using Django and is designed to help users efficiently manage their inventories and promote sustainable living. The Inventory Manager app provides a user-friendly interface for creating, organizing and sharing lists of items. Each list is associated with a unique QR code for easy access and sharing.

The live link can be found here - Inventory Manager

Inventory Manager Am I Responsive Image

Contents

UX/UI

User Stories

User Profile

User Navigation

User Feedback

Create Inventories

Manage Inventories

Contact Form

Site Administration

Agile

The development of this project followed an agile approach, emphasizing flexibility from initial planning to final implemenation. To facilitate the management of tasks and user stories, a GitHub project was created, using the Kanban board method. To gain insights to the project's progress and detailed user stories, including their associated tasks, please see link to the project board here. Each user story has been categorized with labels indicating its importance and relevance to the overall functionality and usability of the application.

Site Owner Goals

The primary goals of the Inventory Manager app are to provide users with an efficient and user-friendly platform for organizing and managing their belongings. The Inventory Manager app is also intended to promote awareness of possesions to encourage suistanable and mindful consumption. Main goals include optimizing inventory management, user engagement and integrating QR code functionality. Through a visually appealing and accessible interface, delivering a high level of user satisfaction. Using QR codes to share inventories is designed to simplify daily life and encourage sharing or exchanging of items left unused. These goals aim to create a reliable and simple application with focus usability, security and innovation.

5 planes of UX

Strategy

The strategy for the Inventory Manager app centers around meeting user needs by providing an efficient and user-friendly platform for organizing belongings. The focus is on optimizing inventory management and creating awareness for sustainable and mindful consumption.

Scope

The project prioritizes essential functionality, ensuring features like user registration, login, efficient inventory creation, adding items, QR code integration and secure data handling. Future features are considered based on upcoming needs and user feedback.

Structure

The app's structure includes user-friendly navigation, seamless QR code integration, and sharing features. The design emphazises on accessibility, inclusivity and intuitive use for a positive user experience.

Skeleton

The Inventory Manager app is designed for easy navigation with clear interface and user flows. QR code generation, inventory sharing and secure user authentication are well integrated to enhance the overall user experience.

Surface

The visual design of the app prioritizes clarity, accessiblity and an appealing interface. The emphasis is on creating a visually appealing and user-centric experience while maintaining focus on sustainability and awareness.

Design

Images

The background image on the landing page has graphic elements of various abstract shapes, which contributes to the theme of organization and categorization, aligning with the application's purpose.

Colours

The colours used for the website consists of a vibrant orange colour, same colour as the background image, giving the user a sense of energy and enthusiasm along with a modern website. The dark colour breaks off the orange and creates a balance throughout the website.

Fonts

Roboto is the main font used for the body of the application and Lato used for the headings. Sans Serif is the backup font. The fonts were imported via Google Fonts.

Wireframes

The wireframes were produced via Balsamiq.

Landing Page ![Landing Page](docs/wireframes/landing_page.png)
Logged In ![Logged In](docs/wireframes/logged_in.png)
My Inventory ![My Inventory](docs/wireframes/my_inventory.png)
Contact Form ![Contact Form](docs/wireframes/contact_form.png)
Mobile ![Contact Form](docs/wireframes/mobile.png)

Features

Navigation

The Landing Page

My Inventory

  1. Once logged in, the user can create an inventory list immediately. First by choosing a unique name for the inventory list. If a list name already exists, the user will get an error message. A "General" category is provided to the user, so that the user can get started quickly and add/modify categories further on. The user will then get a success message of the created inventory list, and will be redirected to the Itemsform, to add the items to the list.

  2. The user can add several items at once and will recieve a success message upon added items, and error messages if no items are added. The user can't save an empty list. When the user clicks on save list, the user will be redirected to the dashboard with a success message of successful save.

  3. The list is now saved and visible on the dashboard with number 1 appended to the list name. The next list will have the number 2 and so on. The lists will also be ordered alfabetically. The QR code-image is rendered when the list is saved, so the user can now scan the QR-code.

  4. The user can download the QR-code image, that will open i a new tab. The user can also share the link to the QR-code via email with a prepopulated email.

  5. The user can also clone a list by clicking on "clone list". There, the user can edit, delete and add items. When saved, the user will get a success message and be redirected to the dashboard where the cloned list now will be visible.

  6. If the user clicks on "view details" the user will get to a view where the user can click on "edit list" or "delete list". If the user clicks on delete list, the user will be prompted to confirm deletion, and a success message will render. The user will be redirected to the Itemsform if user clicks on "edit list".

    Create Inventory List ![Empty dashboard](docs/readme_images/features/dashboard.1.png) ![Create inventory](docs/readme_images/features/create_inventory.png)
Add Items ![Add Items](docs/readme_images/features/add_items.png)
Saved list ![Saved list](docs/readme_images/features/saved_list.png)
Scanned QR-code ![Scanned QR-code](docs/readme_images/features/scanned_qr_code_list_owner.png) ![Scanned QR-code](docs/readme_images/features/scanned_qr_code_not_list_owner.png)
Download QR-code ![Download QR-code](docs/readme_images/features/download_qr_code.png)
Share QR-code ![Share QR-code](docs/readme_images/features/share_qr_code.png)
Clone list ![Clone list](docs/readme_images/features/clone_list.png) ![Clone list](docs/readme_images/features/cloned_list_view.png)
Edit or delete list ![Edit or delete list](docs/readme_images/features/edit_delete_list.png) ![Edit list](docs/readme_images/features/edit_list.png) ![Delete list](docs/readme_images/features/delete_list.png)

Categories

Add Categories ![Add Categories](docs/readme_images/features/add_categories.png) ![Add Categories](docs/readme_images/features/add_categories.2.png) ![Add Categories](docs/readme_images/features/category_added.png)
Edit or delete categories ![Edit categories](docs/readme_images/features/edit_category.png) ![Delete categories](docs/readme_images/features/delete_category.png)

Contact

Contact form ![Contact form](docs/readme_images/features/contact_form.png)
Automated email ![Automated email to sender](docs/readme_images/features/automated_email_to_sender.png) ![Automated email to admin](docs/readme_images/features/automated_email_to_admin.png)

Features left to implement

CRUD

CRUD functionality is included in the above features.

Create: An authenticated user can create and save an inventory list, items and categories.

Read: A user can read the content of their own inventory lists.

Update An authenticated user can edit and update their inventory lists as well as categories.

Delete: An authenticated user can delete their own items, categories and inventory lists.

Database Design

Database Models

The entity relationship diagram provided is the first draft and does not include all the fields and models in the final database.

Database schema ![Database schema](docs/readme_images/database_schema.png)

User Model (AllAuth)

Django AllAuth was used for the user authentication. The user model handles authentication and representes users in the system. Its function is to store information about users, allowing them to log in and manage their data.

Relationship:

One-to-may relationship with the Inventory Model: One user can have multiple inventories.

Inventory Model

The inventory model is managing collections of items. Its function is to organize and store information about inventories created by users. Each inventory is associated with a specific user and can include multiple items. The QR-code image is associated with the inventory.

Relationships:

Many-to-one relationship with the User Model: Many inventories can belong to one user.

One-to-many relationship with the Items Model: One inventory can have multiple items.

Many-to-one relationship with the Category Model: Many inventories can belong to one category.

Category Model

Its function is to categorize the inventories. The category model also includes a user field. Categories that was added by other users would be seen by everyone, and that's why I hade to add a user field to link the category to the user. I also choose not to delete the inventory list if a category is deleted. That gives the user the option to change category or delete a list by them self.

Relationship:

Many-to-one relationsship with the Inventory Model: Once category can be associated with multiple inventories.

Testing

Testing and the results can be found here.

Security Features

Form Validation

If empty or incorrect data is added to a form, the form won't submit. An error will arise, informing the user what field caused the error.

User Authentication

Limits access for non-registred users and permission control so that only the owner of a list can edit and delete a list when shared with others.

Database Security

Technologies & Languages used

Deployment

Heroku

The application was deployed to Heroku using the following steps:

Create the Heroku App

  1. Log in to Heroku
  2. Click on New and select Create new app from the drop-down menu.
  3. Enter a unique and appropiate app name.
  4. Select you region.
  5. Click on "Create App"

Create the PostgreSQL database using ElephantSQL

  1. Log in to ElephantSQL and navigate to Dashboard.
  2. Click on "Create New Instance".
  3. Provide a project name and choose "Tiny Turtle", the free plan.
  4. Click on "Select Region" and choose Data center.
  5. Review all the details and click on "Create Instance".
  6. Return to the Dashboard and click on the newly created instance and copy the database URL.

Create and prepare files

Deploy

Fork

Clone

  1. Navigate to the repository Inventory Manager.
  2. Click on the 'Code' dropdown menu above the list of files and choose a method to copy the URL, via HTTPS, SSH or GitHub CLI.
  3. Open Terminal, change the current working directory to the desired location of the cloned directory.
  4. Type 'git clone' and paste the URL copied form GitHub.
  5. Type 'Enter' to create the local clone.

The live link can be found here - Inventory Manager

Credits

Code

General

Django Authentication System

Django email authentication

QR-code functionality

I used code from here to build the QR-code function:

Building the URL

The QR-code image wouldn't display on the deployed site. I encountered a mixed content warning and after a lot of reasearch I understood that I had to make sure the QR code images were loaded securely.

I used these guides and code to solve that problem:

Clone list

Credit to my mentor Antonio who helped me implement the functionality to clone a list.

Empty label

Formsets

I used code from here to implement the inline-factory formset:

For loop counter

To number the inventory lists automatically:

Read-only fields

I used code from here to implement the read-only function upon for inline editing:

Sending email function

I used code from here to setup the sending email function using send_email:

Share QR-code via email

Tests

Using Boostrap delete confirmation

Content

The content is written by the developer.

Media

Acknowledgements