Professional Documents
Culture Documents
Damini Mhaske TYMCA32 HouMainServices Final Project Report
Damini Mhaske TYMCA32 HouMainServices Final Project Report
ON
FOR
BY
411044.
2020-2021
Certificate from Company
Certificate from Institute
Acknowledgement
Acknowledgement…………………………………………………..6
CHAPTER 1 : INTRODUCTION……………………………………9
CHAPTER 2 : PROPOSED
SYSTEM………………………………19
2.1 Proposed
System………………………………………………..20
2.2 Objectives of
System……………………………………………21
2.3 User
Requirements………………………………………………22
Diagram………………………………………………24
CHAPTER 3 : ANALYSIS &
DESIGN………………………………25
3.1 Class
Diagram…………………………………………………….26
Diagrams………………………………………………27
3.3 Component
Diagram……………………………………………..28
3.4 Deployment
Diagram…………………………………………29
Diagram………………………………….30
3.6 Module
Specifications……………………………………….31
………………………………….32
…………………………………………45
………………………45
3.8.2 Table
Design……………………………………………….46
Implementation……………………..49
CHAPTER 4 : USER
MANUAL…………………………………55
4.1 User
Manual………………………………………………….56
DRAWBACKS AND
LIMITATIONS……………………………68
PROPOSED ENHANCEMENTS………………………………
69
CONCLUSION…………………………………………………..
70
BIBLIOGRAPHY………………………………………………..
71
ANNEXURES……………………………………………………
72
CHAPTER 1:
Introduction
1.1 Company Profile
Youricsoft, founded in the year 2018 and located in Pune, India, in order to
help our Clients with IT solutions. A complete Information Technology (IT)
solution company dealing in software to hardware along with consulting client
in their problems. Youricsoft has friendly and expert professionals provides
customize IT solutions to clients using advanced technologies to improve
their productivity and efficiency.
At Youricsoft make sure client are in sync with technologies to meet their
business needs. To make a project successful, Youficsoft team understands
the project precisely by understanding client’s problem and their pain area.
Using there work precess they plan the project properly and design it to
provide on time delivery with assured quality.
They are providing different services to clients in all the various sectors. With
self-motivated ideas and concepts, Also focused on transform thoughts into
creation explaining their tag line ‘You Think, We Create’, helping clients to
find solution by converting their ideas to solve their problems.
Address:
Youricsoft Software (India) Pvt. Ltd.,
Office No 404, Crossroad Bld. SN-130,
Bhumkar Chowk, Wakad, Pune 411057
Phone No.: +91 87932 28861
Website: https://www.youricsoft.com/
1.2 Existing System and Need for System
Existing System:
In the existing system, Owner worried about the property maintenance and
the tenant has that headache to maintain and solve the property problems
like Plumbing, Electrical, Electronic, and Home Paint. For those services they
can go through a personal meeting or mobile call. It is difficult for the tenant
to find any service in an emergency at any time and place.
The main problem is to maintain the property and that is not considered in the
current legacy process, we are trying to tackle that problem by providing the
WIN-WIN situation for both the owner and Tenant.
So with this project we are going to develop website and android app
which will help customers to find out solution for any problems related to
Plumbing, Electrical, Electronic, and Mechanical, Pest Control, Home
Paint and Machine Repairing service.
Our website and android application will provide a platform for all kind of
house hold services at any time and place. Our project will also provide
the facilities like security, online payment, map navigation and also
advertisement.
Saving of time.
Make available house hold services through website & application.
Hardware Requirements:
▪ Processor - Pentium IV
▪ RAM - 2 GB
▪ Hard Disk - 2 GB
Software Requirements:
Java:
The language was initially called Oak after an oak tree that stood outside
Gosling's office. Later the project went by the name Green and was finally
renamed Java, from Java coffee. Gosling designed Java with a C/C++-style
syntax that system and application programmers would find familiar.
Angular:
HTML:
CSS:
DB -MySQL:
Bootstrap:
task-specific mobile apps are employee’s primary tools for getting work done
and addresses the requirements of those technologies.
Framework:
IONIC:
Spring Boot:
Proposed System
2.1 Proposed System
In the proposed system, all the user and House Maintenance related details
will be maintained in a well-structured format and track of the transactions
between several aspects of the automated test designed for the teams and
distributed to their members.
2.2 Objective of System
Owner:
Tenant:
Inspector:
Service Provider:
Add Menu coming from menu.json file with a mentioned access specifier
Add Owner Information Frontend
A dashboard that contains a welcome message (Later will replace this page with
status)
Display Owner List Frontend
Display Owner List with Pagination Logic
Add Owner Information Backend
Return Owner Information based on the Unique Owner Id Backend
Disable Owner based on unique Owner Id backend
Display Owner Information with All details Frontend
Disable Owner Frontend
View Only owner Information - Provide the Edit option from that
Add Property
Amenities Master
View Property
Enable and Disable Property
List All Properties
2. Login Screen
3. Forgot Password Screen
4. Add Owner 1
5. Add Owner 2
6. Add Property 1
7. Add Tenant
8.Add System User
Output Screens
1. Owner Tenant Registration
2. Registration Response
9. Registered Property
10. Register Property Details
User
Sr No columnName Type Size Constraints
1 userId int 11 PK
2 firstname varchar 255 Not Null
3 lastname varchar 255 Not Null
4 emailid varchar 255 Not Null
5 mobileNumber varchar 15 Not Null
6 password varchar 1000 Not Null
7 active varchar 50 Not Null
8 dateOfBirth date Null
9 photo blob Null
UserRoleMapping
Sr No columnName Type Size Constraints
1 mappingId int 11 PK
2 userId int 11 FK
3 roleId int 11 FK
Owner
Sr No columnName Type Size Constraints
1 ownerId int 11 PK
2 userId int 11 FK
3 EmailId varchar 255 Not Null
4 alternateEmailId varchar 255 Null
5 mobileNumber varchar 15 Not Null
6 Company Name varchar 255 Null
7 address1 varchar 255 Not Null
8 address2 varchar 255 Null
9 city varchar 100 Not Null
10 state varchar 100 Not Null
11 country varchar 100 Not Null
12 zipCode varchar 10 Not Null
13 updatedBy int 11 FK
14 updatedOn datetime Not Null
Property
Sr No columnName Type Size Constraints
1 propertyId int 11 PK
2 propertyTitle varchar 1000 Not Null
3 typeId int 11 FK
4 lat decimal 6,4 Null
5 lng decimal 6,4 Null
6 status ENUM Not Null
7 propertyDescription varchar 1000 Null
8 address1 varchar 255 Not Null
9 address2 varchar 255 Null
10 city varchar 100 Not Null
11 state varchar 100 Not Null
12 country varchar 100 Not Null
13 zipCode varchar 10 Not Null
14 updatedBy int 11 FK
15 updatedOn datetime Not Null
PropertyOwnerMapping
Sr No columnName Type Size Constraints
1 mappingId int 11 PK
2 ownerId int 11 FK
3 propertyId int 11 FK
4 registerDate datetime Null
5 updatedBy int 11 FK
6 updatedOn datetime Not Null
propertyType
Sr No columnName Type Size Constraints
1 typeId int 11 PK
2 type varchar 100 Not Null
3 description varchar 1000 Null
PropertyUnit
Sr No columnName Type Size Constraints
1 propertyUnitId int 11 PK
2 propertyid int 11 FK
3 typeId int 11 FK
4 unit int 3 Not Null
5 address varchar 1000 Not Null
6 bed int Null
7 gallary int Null
8 bath int Null
9 squareFeet decimal 10,2 Not Null
10 carpet decimal 10,2 Null
11 sellable decimal 10,2 Null
12 active boolean
13 updatedBy int 11 FK
14 updatedOn datetime Not Null
propertyPhotos
Sr No columnName Type Size Constraints
1 propertyPhotoId int 11 PK
2 propertyId int 11 FK
3 propertyUnitId int 11 FK
4 photo blob Null
5 photoLink varchar 1000 Null
6 altText varchar 255 Null
7 parking decimal 4,2 Null
8 parkingArea decimal 4,2 Null
9 active boolean Null
10 updatedBy int 11 FK
11 updatedOn datetime Not Null
Rent
Sr No columnName Type Size Constraints
1 propertyId int 11 PK
2 propertyUnitId int 11 FK
3 minRent decimal 10,2 Not Null
4 maxRent decimal 10,2 Not Null
5 securityDeposite decimal 10,2 Null
6 updatedBy int 11 FK
7 updatedOn datetime Not Null
Tanent
Sr No columnName Type Size Constraints
1 tanentId int 11 PK
2 userId int 11 FK
3 taxPayerId varchar 255 Null
4 emergencyContact varchar 255 Null
5 relationship varchar 100 Null
6 emailId varchar 255 Null
7 phoneNumber varchar 15 Null
the data is prepared and the system is using the test data. While doing
testing, errors are noted and correction is made. The users are trained to
operate the developed system. Both hardware and software securities are
methodology.
each unit of the software performs as designed. A unit is the smallest testable
part of any software. Unit Testing will be done to test field validations,
Status PASS
Status PASS
Status PASS
Test Case Edit Owner & Tenant Information
Status PASS
Status PASS
Test Case No Duplicate property for one owner
Status PASS
Test Case Request for Service
Status PASS
CHAPTER 4 :
USER MANUAL
Now system will redirect user to login screen to enter into the
system.
Login Screen
On the login screen user can enter the previously registered
details to enter into the system.
If user facing issues to with the the user details then on the
same screen system has provided to reset the login credentials
by clicking on “Forgot Password” link. Now user will redirect to
the forgot password Screen.
Forgot Password Screen
Once user click on submit button system will prompt user with
Success message. If something went wrong at server side then
system will inform user and ask to contact admin user.
Add Property
Once user submit the property the property will go for the
approval from inspector, Admin person can assign that property
to local inspector to visit property and approve the property for
public visibility. Until and unless inspector not approved it, the
property wont be visible for the tenant for its allocation (rent).
Registered Properties by Owner
Owner can check his registered properties from the system and
get the complete information about it and withdraw the property
from the tenant.
Owner has register the property with system, now system will
prompt System user to assign that property to local Inspector to
verify that property and fill the incomplete information.
Here Inspector has all the rights to approve and reject the
properties, Rejected property can be reapply for new inspection.
With this form system will get the complete Tenant information
about its address verification.
With this screen tenant will get the complete information about
the property, and its locality.
Once user click on Book Now button, system will prompt user to
confirm, once confirm system will assign that property to the
user for Renting.
DRAWBACKS AND LIMITATIONS
PROJECT LIMITATION:
service.
PROPOSED ENHANCEMENTS
can be created.
CONCLUSION
with the tenant, finding the vendor, fixing the issue. Also, our
work.
1. Frontend Technology
a) AngularIO (https://www.angular.io)
b) W3schools (https://www.w3schools.com)
2. Java -
b) StackOverflow (https://stackoverflow.com/)
c) SpringIO (https://spring.io/)
a) buildium.com (https://www.buildium.com/)
b) Housing.com (https://www.housing.com)
ANNEXURES:
Login.ts
storage.service';
'./../../shared/services/authentication.service';
@Component({
selector: 'app-signin',
templateUrl: './signin.component.html',
styleUrls: ['./signin.component.scss']
})
loginForm: FormGroup;
returnUrl: string;
errorMessage: "";
popupText: string;
iconText: string;
isLoginFailed: boolean;
isLoggedIn: boolean;
constructor(
) {}
public errorMessages = {
username:[
{type:'required',message:'Username is required'},
],
password:[
{type:'required',message:'Password is required'},
& must contain at least 1 uppercase letter & 1 special character & 1 number'}
}
ngOnInit() {
this.router.navigate(['/dashboard']);
this.loginForm = this.formBuilder.group({
+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$")]],
password:["",[Validators.required
]],
});
get f() {
return this.loginForm.controls;
onSubmit() {
this.authService.login(this.loginForm).subscribe(
data => {
console.log(decodedToken);
this.StoreLoggedUserDetails(data,decodedToken);
},
err => {
this.iconText="error";
this.openDialog(this.popupText,this.iconText);
}else if(err.status === 404){
this.openDialog(this.popupText,this.iconText);
this.openDialog(this.popupText,this.iconText);
else{
Administrator ";
this.openDialog(this.popupText,this.iconText);
);
openDialog(popupText,iconText){
Swal.fire({
icon: iconText,
title: popupText,
});
StoreLoggedUserDetails(data,decodedToken){
this.tokenStorage.saveToken(data['access_token']);
this.authService.getUserDetailsByUsername(decodedToken.user_name).sub
scribe(
data => {
var roleRedirect = {
'ADMIN_USER' : '/dashboard/applicant',
'INSPECTOR': '/dashboard/applicant',
'OWNER': '/dashboard/applicant',
'TENANT': '/property/showcase-property'
this.tokenStorage.saveUser(data['data']);
this.isLoginFailed = false;
this.isLoggedIn = true;
this.popupText="Login Succesfull";
this.iconText="success";
this.openDialog(this.popupText,this.iconText);
this.router.navigate([roleRedirect[role.roleName]]);
break;
},
err => {
this.iconText="error";
this.openDialog(this.popupText,this.iconText);
this.openDialog(this.popupText,this.iconText);
this.openDialog(this.popupText,this.iconText);
else{
Administrator ";
this.openDialog(this.popupText,this.iconText);
);
}
Backend OwnerController.java
package com.youricsoft.houmain.controller;
import java.util.List;
import java.util.Optional;
import javax.annotation.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestBody;
Import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod;
import
org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.youricsoft.houmain.bo.ServerResponse;
import com.youricsoft.houmain.dto.OwnerDTO;
import com.youricsoft.houmain.dto.OwnerInterface;
import com.youricsoft.houmain.mapper.OwnerMapper;
import com.youricsoft.houmain.model.Owner;
import com.youricsoft.houmain.model.User;
import com.youricsoft.houmain.service.GenericService;
import com.youricsoft.houmain.service.OwnerService;
import com.youricsoft.houmain.service.PropertyService;
@RestController
@RequestMapping(value="/service/owner")
@RequestMapping(value="/save",
method=RequestMethod.POST)
public ServerResponse<OwnerInterface>
ServerResponse<>();
Optional<Owner> existingUser =
ownerService.findByPrimaryEmail(ownerDTO.getPrimaryEmail()
);
if (existingUser.isPresent()) {
populateExistingOwner(existingUser.get(),
ownerDTO);
ownerService.save(existingUser.get());
response.setStatus(HttpStatus.OK);
response.setResponseCode(HttpStatus.OK.value());
response.setData(existingUser.get());
} else {
Owner savedOwner =
ownerService.registerOwner(ownerDTO);
response.setStatus(HttpStatus.OK);
response.setResponseCode(HttpStatus.OK.value());
response.setData(savedOwner);
} else {
response.setStatus(HttpStatus.NOT_MODIFIED);
response.setResponseCode(HttpStatus.NOT_MODIFIED.value(
));
response.setData(savedOwner);
}
return response;
OwnerDTO ownerDTO) {
owner.setCompanyName(ownerDTO.getCompanyName()==null
? owner.getCompanyName() : ownerDTO.getCompanyName());
owner.setCity(ownerDTO.getCity()==null ?
owner.getCity() : ownerDTO.getCity());
owner.setCountry(ownerDTO.getCountry()==null ?
owner.getCountry() : ownerDTO.getCountry());
owner.setHomeNumber(ownerDTO.getHomeNumber()==null ?
owner.getHomeNumber() : ownerDTO.getHomeNumber());
owner.setMobileNumber(ownerDTO.getMobileNumber()==null ?
owner.getMobileNumber() : ownerDTO.getMobileNumber());
owner.setOfficeNumber(ownerDTO.getOfficeNumber()==null ?
owner.getOfficeNumber() : ownerDTO.getOfficeNumber());
owner.setState(ownerDTO.getState() ==null ?
owner.getState() : ownerDTO.getState());
owner.setStreetAddress(ownerDTO.getStreetAddress()
==null ? owner.getStreetAddress() :
ownerDTO.getStreetAddress());
owner.setTaxIdentityType(ownerDTO.getTaxIdentityType()
==null ? owner.getTaxIdentityType() :
ownerDTO.getTaxIdentityType());
owner.setTaxpayerId(ownerDTO.getTaxpayerId() ==null
? owner.getTaxpayerId() : ownerDTO.getTaxpayerId());
owner.setZip(ownerDTO.getZip() == null ?
owner.getZip() : ownerDTO.getZip());
owner.setStatus(1);
@RequestMapping(value="/get",
method=RequestMethod.GET, consumes="application/json")
public ServerResponse<OwnerDTO>
ServerResponse<OwnerDTO>();
Optional<Owner> existingOwner =
ownerService.findById(id);
if(existingOwner.isPresent()) {
OwnerDTO dto =
OwnerMapper.INSTANCE.ownerTOOwnerDTO(existingOwner.
get());
dto.setProperties(propertyService.findOwnerProperties(id));
response.setStatus(HttpStatus.OK);
response.setResponseCode(HttpStatus.OK.value());
response.setData(dto);
}else {
response.setStatus(HttpStatus.NOT_FOUND);
response.setResponseCode(HttpStatus.NOT_FOUND.value());
return response;
}
User user) {
ownerDTO.setFirstName(user.getFirstName());
ownerDTO.setLastName(user.getLastName());
ownerDTO.setStatus(user.getUserStatus()?1:0);
@RequestMapping(value="/getAll",
method=RequestMethod.GET)
ServerResponse<>();
if(ownerList.isEmpty()) {
serverResponse.setStatus(HttpStatus.NO_CONTENT);
serverResponse.setResponseCode(HttpStatus.NO_CONTENT.
value());
}
else {
serverResponse.setStatus(HttpStatus.OK);
serverResponse.setResponseCode(HttpStatus.OK.value());
serverResponse.setData(ownerList);
return serverResponse;
@RequestMapping(value="/get",
method=RequestMethod.PUT, consumes="application/json")
public ServerResponse<Owner>
ServerResponse<Owner>();
Optional<Owner> existingOwner =
ownerService.findById(id);
if(existingOwner==null) {
response.setStatus(HttpStatus.NOT_FOUND);
response.setResponseCode(HttpStatus.NOT_FOUND.value());
}else {
Owner updatedOwner =
genericService.disableOwner(existingOwner.get());
response.setStatus(HttpStatus.OK);
response.setResponseCode(HttpStatus.OK.value());
response.setData(updatedOwner);
return response;