BSC - Recordmodel 1
BSC - Recordmodel 1
BSC - Recordmodel 1
A desertion submitted in partial fulfillment of the requirements for the award of degree
By
MOHAMED HARRIS S
REG. NO.: 2113171058034
1|Page
PG DEPARTMENT OF COMPUTER SCIENCE
BONAFIDE CERTIFICATE
Place :
Date :
2|Page
ACKNOWLEDGEMENT
“In the name of Allah, the most Beneficent, the most Merciful”
(MOHAMMED HARRIS S)
3|Page
S.N Contents Page
o No.
1. Introduction
2. System Analysis
3. Requirement Specification
4. System Design
5. Software Description
6. System Testing And
Implements
7. ER Diagram
8. Table Structure
9. Form Layout
10. Data Reports
11. Source Code
12. Conclusion
13. Future Enhancement
15. Bibliography
4|Page
INTRODUCTION
5|Page
INTRODUCTION
The Expense Planner Web Application is a comprehensive and intuitive tool designed to
revolutionize personal finance management.
This platform offers users a seamless experience to track, analyze, and optimize
their expenses
effortlessly.
Intended Audience
Anyone who wanted to manage their expense and income.For example students, small
business owners , working professionals , etc.
6|Page
SYSTEM ANALYSIS
7|Page
SYSTEM ANALYSIS
INTRODUCTION
After analyzing the requirements of the task to be performed, the next step is to
analyze the problem and understand its context. The first activity in the phase is studying the
existing system and other is to understand the requirements and domain of the new system.
Both the activities are equally important, but the first activity serves as a basis of giving the
functional specifications and then successful design of the proposed system. Understanding
the properties and requirements of a new system is more difficult and requires creative
thinking and understanding of existing running system is also difficult, improper
understanding of present system can lead diversion from solution.
ANALYSIS MODEL
SPIRAL MODEL was defined by Barry Boehm in his 1988 article, “A spiral Model
of Software Development and Enhancement. This model was not the first model to discuss
iterative development, but it was the first model to explain why the iteration models.
As originally envisioned, the iterations were typically 6 months to 2 years long. Each
phase starts with a design goal and ends with a client reviewing the progress thus far.
Analysis and engineering efforts are applied at each phase of the project, with an eye toward
the end goal of the project.
The new system requirements are defined in as much details as possible. This usually
involves interviewing a number of users representing all the external or internal users
and other aspects of the existing system.
A first prototype of the new system is constructed from the preliminary design. This
is usually a scaled-down system, and represents an approximation of the
characteristics of the final product.
8|Page
A second prototype is evolved by a fourfold procedure:
1. Evaluating the first prototype in terms of its strengths, weakness, and risks.
At the customer option, the entire project can be aborted if the risk is deemed too
great. Risk factors might involved development cost overruns, operating-cost
miscalculation, or any other factor that could, in the customer’s judgment, result in a
less-than-satisfactory final product.
The existing prototype is evaluated in the same manner as was the previous prototype,
and if necessary, another prototype is developed from it according to the fourfold
procedure outlined above.
The preceding steps are iterated until the customer is satisfied that the refined
prototype represents the final product desired.
The final system is thoroughly evaluated and tested. Routine maintenance is carried
on a continuing basis to prevent large scale failures and to minimize down time.
9|Page
The following diagram shows how a spiral model acts like:
Spiral Model
ADVANTAGES
10 | P a g e
Estimates(i.e. budget, schedule etc .) become more realistic as work progresses,
because important issues discovered earlier.
It is more able to cope with the changes that are software development generally
entails.
Software engineers can get their hands in and start woring on the core of a project
earlier.
GUI’S
In the flexibility of the uses the interface has been developed a graphics concept in mind,
associated through a browsers interface. The GUI’S at the top level have been categorized as
11 | P a g e
NUMBER OF MODULES
The system after careful analysis has been identified to be presented with the following
modules:
The Modules Involved in the project is:
User Input Handling: Users can input their email and password into designated fields.
Validation: The system checks if the provided email contains the '@' symbol, ensuring it
resembles a valid email format.
Database Query: It queries the Firestore database to find a user with the provided email.
Password Decryption and Comparison: If a user with the provided email exists, it decrypts the
stored password and compares it with the password provided by the user.
User Authentication: If the password matches, the user is authenticated, and their details are
stored locally. They are then redirected to the main page.
Feedback: Notifications are displayed to inform the user whether the login was successful or
unsuccessful.
User Input Handling: Users can input their name, email, and password into designated fields.
Validation: It ensures the email provided by the user contains the '@' symbol, indicating a
valid email format.
Database Check: It checks if a user with the provided email already exists in the database to
prevent duplicate registrations.
12 | P a g e
Password Encryption: The provided password is encrypted using AES encryption before
being stored in the database for security purposes.
Database Update: If the user is new, their details are added to the Firestore database.
Feedback: Notifications are displayed to inform the user whether the registration was
successful or unsuccessful.
General Observations:
Both pages handle user input securely, ensuring the validity of email formats and encrypting
passwords.
They interact with the Firestore database to manage user authentication and registration.
Notifications are provided to give users feedback on their actions, whether successful or
unsuccessful.
These pages together create a basic but functional user authentication system for the
application, allowing users to log in securely and register for new accounts.
2. DASHBOARD:
Users can input details such as the transaction name, type (income or expense), amount, date,
category, and reference.
Depending on the form mode ("add" or "edit"), the component adjusts its behavior
accordingly, either adding a new transaction or updating an existing one.
13 | P a g e
Transaction Table Component:
Each row represents a single transaction, displaying details like name, type, amount, date,
category, and reference.
Users can perform actions on each transaction, such as editing or deleting it.
Transaction data is retrieved from the backend and populated dynamically, providing an up-
to-date view of the user's financial activity.
User authentication ensures that only authenticated users can access the dashboard,
maintaining data privacy and security.
Notification System:
The notification system provides feedback to users based on their interactions with the
application.
Notifications inform users about the success or failure of their actions, such as adding,
updating, or deleting transactions.
Color-coded notifications (e.g., green for success, red for error) enhance clarity and highlight
important messages.
The loading state management ensures a smooth user experience by indicating when
asynchronous operations (e.g., adding, updating, or deleting transactions) are in progress.
14 | P a g e
Visual cues, such as loading spinners or progress indicators, inform users that the system is
processing their requests.
The project leverages Firebase Firestore for data storage and retrieval.
CRUD (Create, Read, Update, Delete) operations are performed on the Firestore database to
manage user transactions.
Real-time synchronization with Firestore enables seamless data updates across devices and
ensures data consistency.
Date Formatting:
Dates are formatted using the moment library to ensure consistency and readability across
different locales.
3. ANALYTIC VIEW:
Total Transactions:
Shows the total number of transactions recorded in the specified time frame.
Further categorized into income and expense transactions, displaying the counts for each.
Transaction Distribution:
Utilizes ring progress components to visually represent the proportion of income and expense
transactions.
Each ring displays the percentage of income or expense transactions relative to the total
number of transactions.
15 | P a g e
Income transactions are represented in teal, while expense transactions are in red.
Total Turnover:
Segregated into income and expense amounts, showing the sum for each.
Turnover Distribution:
Similar to transaction distribution, but now focuses on the distribution of income and expense
amounts.
Ring progress components visually display the proportion of income and expense amounts
relative to the total turnover.
Income Categories:
For each category, it shows the percentage of the total income amount attributed to
transactions in that category.
Progress bars visually represent this percentage, with the bar color corresponding to the
category's color.
Expense Categories:
Lists expense categories and their corresponding percentages of the total expense amount.
Progress bars visually represent these percentages, with the bar color indicating the category's
color.
16 | P a g e
Filters:
Offers users the flexibility to filter transactions based on frequency and type.
Frequency options include last week, last month, last year, or a custom date range.
Users can filter transactions by type, selecting between all transactions, income only, or
expense only.
PROJECT INSTRUCTIONS
Based on the given requirements, conceptualize the Solution Architecture. Choose the
domain of your interest otherwise develop the application for ultimatedotnet.com.
Depict the various architectural components, show interactions and connectedness and
show internal and external elements. Design the web services, web methods and
database infrastructure needed both and client and server.
Provide an environment for upgradation of application for newer versions that are
available in the same domain as web service target.
PROPOSED SYSTEM
To debug the existing system, remove procedures those cause data redundancy, make
navigational sequence proper. To provide information about audits on different level and also
to reflect the current work status depending on organization/auditor or date. To build strong
password mechanism.
We all know the importance of computerization. The world is moving ahead at lightning
speed and everyone is running short of time. One always wants to get the information and
perform a task he/she/they desire(s) within a short period of time and too with amount of
efficiency and accuracy.
17 | P a g e
The application areas for the computerization have been selected on the basis of
following factors:
As far as the project is developed the functionality is simple, the objective of the
proposal is to strengthen the functioning of Audit Status Monitoring and make them effective
and better. The entire scope has been classified into five streams knows as Coordinator Level,
management Level, Auditor Level, User Level and State Web Coordinator Level. The
proposed software will cover the information needs with respect to each request of the user
group viz. accepting the request, providing vulnerability document report and the current
status of the audit.
The entire scope has been classified into five streams known as: -
Coordinator Level
Management Level
Auditor Level
18 | P a g e
User Level
The main inputs, outputs major functions of the system are as follows
User Input:
Filter Selection:
Users can select the type of transactions they want to view (e.g., expenses, income).
Last 7 days
Last 30 days
Transaction Management:
Users can add a new transaction by providing details such as date, type, amount, etc.
Users can edit existing transactions by selecting them from the transaction list and modifying
the details.
19 | P a g e
User Output:
Transaction Display:
Upon applying filters, users see a list of transactions matching their criteria.
Each transaction entry displays details such as date, type, amount, etc.
Analytics Visualization:
Users can switch to the analytics view to visualize their spending patterns and trends.
Graphs or charts depict insights such as total expenses over time, category-wise spending
distribution, etc.
Transaction Form:
The form prompts users to input details like date, type, amount, etc.
Notifications:
Users receive notifications for successful transactions, errors during data fetching, or any
other critical events.
20 | P a g e
Filtering Transactions:
Transaction Display:
Adding a Transaction:
User fills in the details (date, type, amount) and submits the form.
Editing a Transaction:
The transaction form modal opens with pre-filled details of the selected transaction.
Viewing Analytics:
Receiving Notifications:
User receives a notification if there's an error while fetching transactions or saving edits.
21 | P a g e
PROCESS MODELS USED WITH JUSTIFICATION
USER NAME:
The component provides a field for users to enter their name.
This input is captured and stored in the component's state or form state.
EMAIL:
Users are prompted to input their email address.
Any validations or formatting checks may occur to ensure the email format is correct.
PASSWORD:
Users can input their passwords securely in a password field.
The component ensures that the entered password is not visible to others.
22 | P a g e
REQUIRMENT
SPECIFICATIONS
23 | P a g e
HARDWARE REQUIREMENTS
PROCESSOR: INTEL i5 8th gen
PROCESSOR SPEED: 1.6 GHZ
RAM: 8 GB
MONITOR: 1080 FULL HD LED DISPLAY
KEYBOARD: STANDARD KEYBOARD
OPERATING SYSTEM: WINDOWS 11
HDD: 1TB
SSD: 256GB
MOUSE: MOUSEPAD TRACK
SOFTWARE REQUIREMENTS
TECHNOLOGY
FRONT END: REACT.
BACK END: FIREBASE.
DATABASE: FIRESTORE DATABASE.
24 | P a g e
SYSTEM DESIGN
25 | P a g e
SYSTEM DESIGN:
In this phase, we provide a physical shape to all the models that are created in the analysis
phase. The design phase is used to physically create different elements of the project. This
phase involves the following sub-phases.
Module Design:
In this step, we identify the modules and sub-modules of the project. Module is the functional
unit of a project. The modularity of a project depends upon the functional requirements and
also the users of the project. In this step, we identify the modules and sub-modules of the
project. Module is the functional unit of a project. The modularity of a project depends upon
the functional requirements and also the users of the project.
Login and Register page: This module involves all the functionalities meant for the
registration and login of the user account.
Dashboard: This module involves all the functionalities meant for the dashboard.
Analytic: This module involves all the functionalities meant for the analytic
Data Design:
Data dictionary is a document, which describes the database design of the project. In this step,
we generate the data dictionary using the E-R Model of the system. Each entity is represented
as a table here. The Data dictionary describes the tables, their fields, data types and constraints
on the fields. The Data Design transforms the information domain model created during
analysis into the data structure that will be required to implement the software.
Data Design is the first of three design activities that are conducted during software
engineering. The impact of data structure on program structures and procedural complexity
cases data design to have a profound influence on software quality. The concept of
information hiding and data abstraction provides the foundation for an approach to data
26 | P a g e
design. The primary activity during data design is to select logical representation of data
objects (data dictionary) identified during the requirements definitions and specifications
phase.
It is the process of designing database files, which are the key source of information to
the system. The files should properly, designed planed for collection, accumulation, editing
the required information. The objectives of the file design are to provide affective auxiliary
storage and to contribute to the overall efficiency of the computer program components to the
system.
A relation R of this system is said to be in first normal form, if all domains contain
atomic values.
In this project the Data in each table has atomic values but the data are redundant. so, I
consider next normal form i.e., Second normal form.
Interface Design:
In this step, we design all the interfaces for the application. Interface is the medium
between the user and the system. We consider all the client specifications while designing
the screens and reports.
Every user interface has been designed so that the system provides all the
characteristics like easy to use, less number of keystrokes to complete an action, less usage of
left hand, easy to learn, easy to navigate, consistent, error-free and functional.
The entire interface that has designed with the features listed below:
27 | P a g e
Every action is provided with a prompting message. So that it provides a better
communication.
Every interface maintained consistent navigation, icons, colors, shape and layout.
Every page has been designed so that it optimizes the user’s work efficiency.
In this step, we design all the test cases, which are used by the testers to test the
application after construction. Test case is nothing but a sample input or sample activity
performed to test for any errors or bugs in the application. In order to perform system testing,
we’ve developed many test cases. Some of them are as follows.
Fail(F)
1 Enter the Wrong login-id and Error Message indicating the -do- P
password to login status of the user
2 Enter correct hint answer in Display the password of the -do- P
password recovery form to user
recover password
3 Enter an existing login-id in the Error message “login_id -do- P
28 | P a g e
SOFTWARE
DESCRIPTION
29 | P a g e
FRONT END
Visual Studio does not support any programming language, solution or tool
intrinsically; instead, it allows the plugging of functionality coded as a
VSPackage.
When installed, the functionality is available as a Service. The IDE provides
three services: SVsSolution, which provides the ability to enumerate projects
and solutions; SVsUIShell, which provides windowing and UI functionality
(including tabs, toolbars, and tool windows); and SVsShell, which deals with
registration of VSPackages.
In addition, the IDE is also responsible for coordinating and enabling
communication between services. All editors, designers, project types and
other tools are implemented as VSPackages. Visual Studio uses COM to
access the VSPackages.
The Visual Studio SDK also includes the Managed Package Framework
(MPF), which is a set of MANAGED wrappers around the COM-interfaces
that allow the Packages to be written in any complaint
language. However, MPF does not provide all the functionality exposed by the
Visual Studio COM interfaces.] The services can then be consumed for
creation of other packages, which add functionality to the Visual Studio IDE.
Support for programming languages is added by using a specific VSPackage
called a Language Service.
A language service defines various interfaces which the VSPackage
implementation can implement to add support for various functionalities.
Functionalities that can be added this way include syntax coloring,
statement completion, brace matching, parameter information tooltips,
member lists, and error markers for background compilation. If the interface
is implemented, the functionality will be available for the language.
Language services are implemented on a per-language basis. The
implementations can reuse code from the parser or the compiler for the
language. Language services can be implemented either in native code or
managed code. For native code, either the native COM interfaces or the
Babel Framework (part of Visual Studio SDK) can be used.
For managed code, the MPF includes wrappers for writing managed language
services.
30 | P a g e
Visual Studio does not include any source control support built in but it defines
two alternative ways for source control systems to integrate with the IDE. A
Source Control VSPackage can provide its own customised user interface.
In contrast, a source control plugin using the MSSCCI (Microsoft Source
Code Control Interface) provides a set of functions that are used to implement
various source control functionality, with a standard Visual Studio user
interface.
MSSCCI was first used to integrate visual source safe with Visual Studio 6.0
but was later opened up via the Visual Studio SDK. Visual Studio
.NET 2002 used MSSCCI 1.1, and Visual Studio .NET 2003 used MSSCCI 1.2.
Visual Studio 2005, 2008, and 2010 use MSSCCI Version 1.3, which adds
support for rename and delete propagation, as well as asynchronous opening.
BACK END
FIREBASE
Firebase is a Backend-as-a-Service (Baas).
It provides developers with a variety of tools and services to help them
develop quality apps, grow their user base, and earn profit.
It is built on Google’s infrastructure.
Firebase is categorized as a NoSQL database program, which stores data in
JSON-like documents.
In Firebase, a document is a set of key-value pairs defined by a schema. A
group of documents makes up a collection.
Usage of FIREBASE
Analytics for gaining insights into user behavior and app performance
Versions of FIREBASE
Version Year Code Name
31 | P a g e
Firebase 1.x 2012 Phoenix
FIRESTORE DATABASE
Firestore is a flexible, scalable NoSQL document database provided by Firebase,
which is a platform developed by Google for building mobile and web applications.
Here's an overview of Firestore:
Document-Oriented: Firestore is a document-oriented database, meaning it
stores data in JSON-like documents. Each document contains key-value
pairs, where keys are strings and values can be various data types, including
strings, numbers, boolean values, arrays, nested objects, and even binary
data.
Collections and Documents: Firestore organizes data into collections and
documents. A collection is a group of documents, and each document is a set
of key-value pairs. You can think of collections as tables in a relational
database and documents as rows within those tables.
Real-time Updates: One of the key features of Firestore is its ability to provide
real-time updates. It uses WebSockets or other efficient mechanisms to
synchronize data between clients and the server in real-time. This makes
Firestore particularly suitable for applications requiring live data updates,
such as chat apps or collaborative tools. SQL Server full text search etc.
32 | P a g e
Instance of FIRESTORE DATABASE:
Creating a Firebase Project: Go to the Firebase console
(https://console.firebase.google.com/) and create a new project or select an
existing one.
Creating Collections and Documents: With Firestore initialized, you can now start
creating collections and documents to store your data. You can do this
programmatically from your application code or manually in the Firebase console.
Reading and Writing Data: You can read data from Firestore using queries and
write data using set, update, or delete operations. These operations can
be performed from your application code using the Firestore SDK.
Setting Security Rules: It's important to set security rules to control access to
your Firestore data. These rules define who can read and write data and under
what conditions. You can define these rules in the Firebase console or by using
Firebase CLI.
Advantages of Instances
To install different versions in one machine.
To reduce cost.
33 | P a g e
To reduce temporary database problems.
34 | P a g e
SYSTEM TESTING AND
IMLEMENTATION
35 | P a g e
SYSTEM DESIGN:
In this phase, we provide a physical shape to all the models that are created in the analysis
phase. The design phase is used to physically create different elements of the project. This
phase involves the following sub-phases.
Module Design:
In this step, we identify the modules and sub-modules of the project. Module is the functional
unit of a project. The modularity of a project depends upon the functional requirements and
also the users of the project. In this step, we identify the modules and sub-modules of the
project. Module is the functional unit of a project. The modularity of a project depends upon
the functional requirements and also the users of the project.
Login and Register page: This module involves all the functionalities meant for the
registration and login of the user account.
Dashboard: This module involves all the functionalities meant for the dashboard.
Analytic: This module involves all the functionalities meant for the analytic
Data Design:
Data dictionary is a document, which describes the database design of the project. In this step,
we generate the data dictionary using the E-R Model of the system. Each entity is represented
as a table here. The Data dictionary describes the tables, their fields, data types and constraints
on the fields. The Data Design transforms the information domain model created during
analysis into the data structure that will be required to implement the software.
Data Design is the first of three design activities that are conducted during software
engineering. The impact of data structure on program structures and procedural complexity
cases data design to have a profound influence on software quality. The concept of
information hiding and data abstraction provides the foundation for an approach to data
design. The primary activity during data design is to select logical representation of data
36 | P a g e
objects (data dictionary) identified during the requirements definitions and specifications
phase.
It is the process of designing database files, which are the key source of information to
the system. The files should properly, designed planed for collection, accumulation, editing
the required information. The objectives of the file design are to provide affective auxiliary
storage and to contribute to the overall efficiency of the computer program components to the
system.
A relation R of this system is said to be in first normal form, if all domains contain
atomic values.
In this project the Data in each table has atomic values but the data are redundant. so, I
consider next normal form i.e., Second normal form.
Interface Design:
In this step, we design all the interfaces for the application. Interface is the medium
between the user and the system. We consider all the client specifications while designing
the screens and reports.
Every user interface has been designed so that the system provides all the
characteristics like easy to use, less number of keystrokes to complete an action, less usage of
left hand, easy too learn, easy to navigate, consistent, error-free and functional.
The entire interface that has designed with the features listed below:
37 | P a g e
Every action is provided with a prompting message. So that it provides a better
communication.
Every interface maintained consistent navigation, menus, icons, colors, shape and
layout.
Every page has been designed so that it optimizes the user’s work efficiency.
In this step, we design all the test cases, which are used by the testers to test the
application after construction. Test case is nothing but a sample input or sample activity
performed to test for any errors or bugs in the application. In order to perform system testing,
we’ve developed many test cases. Some of them are as follows.
Fail(F)
1 Enter the Wrong login-id and Error Message indicating the -do- P
password to login status of the user
2 Enter correct hint answer in Display the password of the -do- P
password recovery form to user
recover password
3 Enter an existing login-id in the Error message “login_id -do- P
user registration form already exists. Please choose
another one”.
4 Adding invalid transaction Error message “Error adding -do- P
transaction.”
5 Deleting transaction Error message “Error -do- P
deleting transaction”
6 Fetching transaction It should display an error -do- P
message “Error fetching
transactions”
38 | P a g e
ER-DIAGRAM
39 | P a g e
Details Dashboard
Login
User name, Password nfirmation
Updating
Valida
User Login Analytic
User Detail
Add Details
Registration Registration
40 | P a g e
TABLE STRUCTURE
41 | P a g e
USER DETAILS TABLE:
42 | P a g e
USER-TRANSACTION TABLE:
43 | P a g e
FORM LAYOUT
44 | P a g e
REGISTER FORM:
45 | P a g e
LOGIN FORM:
46 | P a g e
HOME PAGE:
47 | P a g e
DATA REPORTS
48 | P a g e
RING VIEW REPORT:
49 | P a g e
BAR CHART REPORT:
50 | P a g e
SOURCE CODE
51 | P a g e
REGISTER SOURCE CODE:
import {
Button,
Card,
Divider,
Stack,
TextInput,
Title,
Anchor,
} from "@mantine/core";
function Register() {
initialValues: {
name: "",
email: "",
password: "",
},
});
event.preventDefault();
try {
if (!registerForm.values.email.includes('@')) {
showNotification({
52 | P a g e
color: "red",
});
return;
dispatch(ShowLoading());
"users"),
);
(existingUsers.size > 0) {
showNotification({
color: "red",
});
return;
/ Encrypt password
registerForm.values.password,
"expenease"
).toString();
...registerForm.values,
password: encryptedPassword,
});
if (response.id) {
showNotification({
color: "green",
});
} else {
showNotification({
color: "red",
});
dispatch(HideLoading());
53 | P a g e
} catch (error) {
dispatch(HideLoading());
showNotification({
color: "red",
});
};
return (
<Card
sx={{
width: 400,
padding: "sm",
}}
shadow="lg"
withBorder
>
<img src="\image\Designer.png" alt="" style={{ width: 45, height: 45, marginRight:10}} />
EXPENEASE-REGISTER
</Title>
<Stack mt={5}>
<TextInput
label="Name"
name="name"
{...registerForm.getInputProps("name")}
/>
<TextInput
label="Email"
name="email"
{...registerForm.getInputProps("email")}
/>
<TextInput
label="Password"
54 | P a g e
name="password"
type="password"
{...registerForm.getInputProps("password")}
/>
Register
</Button>
<Anchor href="/login"
color='teal'
</Stack>
</form>
</Card>
</div>
);
import {
Anchor,
Button,
Card,
Divider,
Stack,
TextInput,
Title,
} from "@mantine/core";
55 | P a g e
function Login() {
initialValues: {
name: "",
email: "",
password: "",
},
});
event.preventDefault();
try {
dispatch(ShowLoading());
if (!loginForm.values.email.includes('@')) {
showNotification({
color: "red",
});
dispatch(HideLoading());
return;
collection(fireDb, "users"),
);
if (existingUsers.size > 0) {
// decrypt password
existingUsers.docs[0].data().password,
"expenease"
).toString(cryptojs.enc.Utf8);
showNotification({
color: "green",
});
const dataToPutInLocalStorage = {
56 | P a g e
name: existingUsers.docs[0].data().name,
email: existingUsers.docs[0].data().email,
id: existingUsers.docs[0].id,
};
localStorage.setItem("user", JSON.stringify(dataToPutInLocalStorage));
navigate("/");
} else {
showNotification({
color: "red",
});
} else {
showNotification({
color: "red",
});
dispatch(HideLoading());
} catch (error) {
dispatch(HideLoading());
showNotification({
color: "red",
});
};
return (
<Card
sx={{
width: 400,
padding: "sm",
}}
shadow="lg"
withBorder
>
color="gray"
>
57 | P a g e
<img src="\image\Designer.png" alt="" style={{ width: 45, height: 45, marginRight: 15}} />
EXPENEASE-LOGIN
</Title>
<Stack mt={5}>
<TextInput
label="Email"
name="email"
{...loginForm.getInputProps("email")}
/>
<TextInput
label="Password"
type="password"
name="password"
{...loginForm.getInputProps("password")}
/>
Login
</Button>
<Anchor href="/register"
color='teal'
</Stack>
</form>
</Card>
</div>
);
import { Box, Card, Button, Modal, Group, Divider } from "@mantine/core"; import
from "react-redux";
58 | P a g e
import { fireDb } from "../firebaseConfig";
"../components/Filters";
function Home() {
type: "",
frequency: "7",
dateRange: [],
});
// type condition
// frequency condition
tempConditions.push(
);
tempConditions.push(
where( "date",
">=",
moment().subtract(30, "days").format("YYYY-MM-DD")
59 | P a g e
)
);
tempConditions.push(
where( "date",
">=",
moment().subtract(365, "days").format("YYYY-MM-DD")
);
} else {
return tempConditions;
};
try {
dispatch(ShowLoading());
collection(fireDb, `users/${user.id}/transactions`),
orderBy("date", "desc"),
...whereConditions
);
id: doc.id,
...doc.data(),
}));
setTransactions(data);
dispatch(HideLoading());
} catch (error) {
console.log(error);
showNotification({
color: "red",
60 | P a g e
});
dispatch(HideLoading());
};
useEffect(() => {
getData();
}, [filters]);
return (
<Box>
<Header />
<div className="container">
<Card>
<div>
<Filters
filters={filters}
setFilters={setFilters}
getData={getData}
/>
</div>
<Group>
<Button.Group>
<Button
color="blue"
>
Grid
</Button>
<Button
color="blue"
>
Analytics
</Button>
</Button.Group>
<Button
color="green"
onClick={() => {
61 | P a g e
setShowForm(true);
setFormMode("add");
}}
>
Add Transaction
</Button>
</Group>
</div>
<Divider mt={20}/>
<TransactionTable
transactions={transactions}
setSelectedTransaction={setSelectedTransaction}
setFormMode={setFormMode}
setShowForm={setShowForm}
getData={getData}
/>
)}
</Card>
</div>
<Modal
size="lg"
opened={showForm}
centered
>
<TransactionForm
formMode={formMode}
setFormMode={setFormMode}
setShowForm={setShowForm}
showForm={showForm}
transactionData={selectedTransaction}
getData={getData}
/>
</Modal>
</Box>
);
62 | P a g e
ANALYTICS SOURCE CODE:
import { Divider, Group } from "@mantine/core";
import "../stylesheets/analytics.css";
// transactions count
).length;
).length;
const totalIncomeTransactionsPercentage =
const totalExpenseTransactionsPercentage =
const categories = [
];
// total amount
}, 0);
63 | P a g e
const totalIncomeAmount = transactions
}, 0);
}, 0);
filteredIncomeCategories = categories.filter(
);
);
return (
<div>
<Group mt={20}>
<div className="total-transactions">
<h1 className="card-title">
</h1>
<Group>
<RingProgress
label={
Income {totalIncomeTransactionsPercentage.toFixed(2)}%
</Text>
roundCaps
sections={[
64 | P a g e
value: 100 - totalIncomeTransactionsPercentage,
},
]}
/>
<RingProgress
label={
Expense {totalExpenseTransactionsPercentage.toFixed(2)}%
</Text>
roundCaps
sections={[
},
]}
/>
</Group>
</div>
<div className="total-turnover">
<p>Income : {totalIncomeAmount}</p>
<p>Expense : {totalExpenseAmount}</p>
<Group>
<RingProgress
label={
Income {totalIncomeAmountPercentage.toFixed(2)}%
</Text>
roundCaps
sections={[
},
]}
65 | P a g e
/>
<RingProgress
label={
Expense {totalExpenseAmountPercentage.toFixed(2)}%
</Text>
roundCaps
sections={[
},
]}
/>
</Group>
</div>
</Group>
<div className="income-categories">
{filteredIncomeCategories.map((category) => {
.filter(
(transaction) =>
}, 0);
const incomeCategoryTransactionsPercentage =
return (
<div key={category.value}>
<p>{category.label}</p>
<Progress
size={25}
color='teal'
66 | P a g e
value={incomeCategoryTransactionsPercentage}
label={incomeCategoryTransactionsPercentage.toFixed(2) + "%"}
/>
</div>
);
})}
</div>
<div className="expence-categories">
{filteredExpenseCategories.map((category) => {
.filter(
(transaction) =>
}, 0);
const expenceCategoryTransactionsPercentage =
return (
<div key={category.value}>
<p>{category.label}</p>
<Progress
size={25}
color="red"
value={expenceCategoryTransactionsPercentage}
label={expenceCategoryTransactionsPercentage.toFixed(2) + "%"}
/>
</div>
);
})}
</div>
</Group>
</div>
);
67 | P a g e
CONCLUSION
68 | P a g e
CONCLUSION:
The package was designed in such a way that future modifications can be done easily. The
following conclusion can be deduced from the development of the project.
69 | P a g e
FUTURE ENHANCEMENT
70 | P a g e
FUTURE ENHANCEMENTS:
Enhance the expense tracking capabilities by adding support for categorizing expenses into
different categories or tagging them with relevant labels. This would help users organize and
analyze their expenses more effectively.
Integrate data visualization tools or libraries to provide users with insightful analytics and
reports about their spending habits. Graphs, charts, and summaries can help users better
understand their financial patterns and make informed decisions.
Enable users to set budgets and financial goals within the application. Implement features to
track progress towards these goals and send notifications when approaching or exceeding
budget limits. This can help users maintain financial discipline and achieve their savings
targets.
71 | P a g e
BIBLOGRAPHY
72 | P a g e
BIBLIOGRAPHY
73 | P a g e
74 | P a g e