Giter Club home page Giter Club logo

invoicemanager's Introduction

Invoice Manager

code style: prettier

  This take-home project is called the Invoice Manager. This tool allows you to manage an example invoice JSON.  

UI

Features

Bucket #1

  • The user should be able browse through the line-item data as either a list or table (ie. pagination or infinite-scrolling).
  • The user should be able to see each line-item's billable amount (sub- total = actuals + adjustments).
  • The user should be able to see sub-totals grouped by campaign (line- items grouped by their parent campaign).
  • The user should be able to see the invoice grand-total (sum of each line-item's billable amount).
  • The user should be able to sort the data.

    Thoughts/Why Chosen?

    • A paginated List/Datagrid can almost be considered a necessity of most, if not all, enterprise applications as it is usually the most efficient way to view/manage large data sets.
    • Given the assumed intention of the application (to view/manage a list of campaign invoices), being able to display both the billable amout of each line item and the subtotal for a given campaign was a critical feature for the application to be useful.
    • I would add full CRUD for the campaigns/line items, as well as archiving, reviewing, and comments if given more time to implement those features as they would require a significant time investment for planning/infra setup/development, beyond what I can currently commit to for a take home project.

Bucket #2

  • An integration into an external service that makes sense (eg. a currency conversion service, an export to Amazon S3, etc)
  • The user should be able to filter the data (ie. by campaign name, etc., should affect the grand-total).

    Thoughts/Why Chosen?

    • I choose to integrate a currency conversion service (openexchangerates.org) because I believe it satisfied a valuable use case given that there invoices/totals are highly visible, and it easy to assume that a user would enjoy the convenience of being able to choose which currency monetary values are displayed in.
    • I felt was also an incredibly necessary feature to implement due to the (potentially) very large data set. It's one of the very first things that a user may want to do.

Tools/Languages

How To Run

Requirements:
  • node >= v14.21.3

Starting the App:
  1. Clone the repository locally, then run the following:
$ npm install # Install dependencies (required for every step hereafter)
  1. Sign up for a free (or use an existing) API Key from https://openexchangerates.org/.
  2. Create an .env file in the root directory with the following environment variable and include the API key from the previous step:
NEXT_PUBLIC_OPEN_EXCHANGES_APP_ID="INSERT_APP_ID_HERE"
  1. Run the following command:
$ npm run dev # Start the development server
  1. Open http://localhost:3000/ in a browser to view the application.

Create Production Build:
$ npm run build
Running Tests:
$ npm run unit-test
Running Linter:
$ npm run lint

invoicemanager's People

Contributors

andrefuller avatar

Watchers

 avatar

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.