diff --git a/Free_Sample_By_Wix (1).jpg b/Free_Sample_By_Wix (1).jpg new file mode 100644 index 0000000..12a3119 Binary files /dev/null and b/Free_Sample_By_Wix (1).jpg differ diff --git a/README.md b/README.md index a165602..798d27a 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,10 @@ -## Travel Planner Project - -# Mentorship System (WEBSITE) - - - - -## Setting up the project - -To setup the project locally read these wiki pages and follow the instructions: - - - [Fork, Clone and Remote] - - [Open project in Code Editor ] - -## Contributing - - - -## Branches - -The repository has the following permanent branches: - - * **master** This contains the code which has been released. - - * **develop** This contains the latest code. All the contributing PRs must be sent to this branch. When we want to release the next version of the app, this branch is merged into the `master` branch. - - * **apk** This branch contains the apks for the code in the develop branch. The apks are automatically updated when a commit is pushed to `develop` branch. - -## Contact - - +##Travel-Planner +A web based application which aims to provide a complete travelling package to traveller along with all the booking stuffs such as hotel booking, travel booking, Food, etc., handled on the platform itself. Moreover, the travellers can see the photos of the destination they desire to visit and can compare multiple destinations. User can share their pictures which would help others to get more insights about the destination. Eg: suppose me and my 2 friends are planning to visit delhi then, there will be certain plans available on the website showing different packages and we can choose among them. This can depend on the the number of places to visit associated with each package or the type of hotel etc. + +#This project was made under WOOTECH WINTER MENTORSHIP PROGRAM 2019-2020 under my mentorship. + Contributors: + @aasthasaxena + @hansikarajput + @shreyagupta + + diff --git a/adventure.jpg b/adventure.jpg new file mode 100644 index 0000000..9cb1365 Binary files /dev/null and b/adventure.jpg differ diff --git a/bg.jpg b/bg.jpg new file mode 100644 index 0000000..479cef4 Binary files /dev/null and b/bg.jpg differ diff --git a/bg1.jpg b/bg1.jpg new file mode 100644 index 0000000..58bda76 Binary files /dev/null and b/bg1.jpg differ diff --git a/bg2.jpg b/bg2.jpg new file mode 100644 index 0000000..a94bb19 Binary files /dev/null and b/bg2.jpg differ diff --git a/client b/client new file mode 100644 index 0000000..8299563 --- /dev/null +++ b/client @@ -0,0 +1,475 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import {BoostrapTable, TableHeaderColumn} from 'react-bootstrap-table'; +import DatePicker from 'react-bootstrap-date-picker'; + + +var Login = React.createClass({ + + preventDefault: function(e){ + e.preventDefault(); + }, + + loginUser: function(e){ + var username = this.refs.usernameInput.value; + var password = this.refs.passwordInput.value; + + this.props.login(username, password); + }, + + registerUser: function(e){ + var username = this.refs.usernameInput.value; + var password = this.refs.passwordInput.value; + + this.props.register(username, password); + }, + + render: function() { + return ( +
+
+
+

Log in or Sign Up

+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + +
+
+
+
+
+
+ ); + } +}); + + +var Navbar = React.createClass({ + handleClickLogout: function() { + this.props.logout(); + }, + + render: function() { + + return ( + + ); + } +}); + + +var TripsForm = React.createClass({ + + getInitialState: function(){ + return {'startDate':'', 'endDate':'', 'destination':'', 'comment':''}; + }, + + handleStartDateChange: function(e){ + console.log("newDate", e); + return this.setState({startDate: e}); + }, + + handleEndDateChange: function(e){ + console.log("newDate", e); + return this.setState({endDate: e}); + }, + + handleCommentChange: function(e){ + this.setState({comment: e.target.value}); + }, + + handleDestinationChange: function(e){ + this.setState({destination: e.target.value}); + }, + + transformDate: function(date){ + var splits = date.split('-'); + return splits[1] + '/' + splits[2] + '/' + splits[0]; + }, + + handleSubmit: function(e){ + e.preventDefault(); + var startDate = this.transformDate(this.state.startDate.split('T')[0]); + var endDate = this.transformDate(this.state.endDate.split('T')[0]); + var destination = this.state.destination; + var comment = this.state.comment; + + if(!startDate || !endDate || !destination) return; + + this.props.onTripSubmit({startDate: startDate, endDate: endDate, destination: destination, comment: comment}); + this.setState({startDate: '', endDate: '', destination: '', comment: ''}); + }, + + render: function(){ + const margin = { + marginBottom: '5px' + }; + + return( +
+
+
+ Add new trip +
+
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + + +
+
+ +
+
+
+
+
+ ); + } +}); + +var TripsTable = React.createClass({ + + onBeforeSaveCell: function(row, cellName, cellValue){ + console.debug(row); + if(cellName == 'startDate' ){ + return !(new Date(cellValue) == "Invalid Date") + } + if(cellName == 'endDate' ){ + return !(new Date(cellValue) == "Invalid Date") + } + }, + + onAferSaveCell: function(row, cellName, cellValue){ + this.props.editTrip(row); + }, + + onAfterDeleteRow: function(tripIDs){ + for(var i=0; i < tripIDs.length; ++i){ + this.props.deleteTrip(tripIDs[i]); + } + }, + + + render: function(){ + var options = { + afterDeleteRow: this.onAfterDeleteRow + }; + + var cellEditOptions = { + mode: 'dbclick', + blurToSave: true, + beforeSaveCell: this.onBeforeSaveCell, + afterSaveCell: this.onAferSaveCell + }; + + var selectRowOptions = { + mode: 'checkbox' + }; + + return( + + + Destination + Start Date + End Date + Comment + Days To Trip + + ); + } +}); + +var TravelPlanner = React.createClass({ + getInitialState: function(){ + return{ + username: null, + token: null, + trips: [], + fromDate: null, + toDate: null + } + }, + + logout: function(){ + this.setState({username: null, token: null}); + }, + + login: function(username, password){ + console.debug(username) + this.ajaxCall({ + method: 'POST', + url: 'api/token', + data: JSON.stringify({"username": username, "password": password}), + success: function(data){ + console.debug('Data ', data); + this.setState({ + username: username, + token: data['access_token'] + }); + }.bind(this) + }); + }, + + register: function(username, password){ + this.ajaxCall({ + method: 'POST', + url: 'api/users', + data: JSON.stringify({"username": username, "password": password}), + success: function(data){ + console.debug('Data ', data); + this.login(username, password); + }.bind(this) + }); + }, + + componentDidUpdate: function(prevProps, prevState){ + if(this.state.token != null && prevState.token == null){ + this.getTrips(); + $("#loginWarning").hide(); + } + }, + + getTrips: function(){ + this.ajaxCall({ + method: 'GET', + url: 'api/users/' + this.state.username + '/trips', + success: function(data){ + this.setState({trips: data["trips"]}); + }.bind(this) + }) + }, + + submitTrip: function(data){ + this.ajaxCall({ + method: 'POST', + url: '/api/users/' + this.state.username + '/trips', + data: JSON.stringify(data), + success: function(data){ + this.getTrips(); + }.bind(this) + }) + }, + + editTrip: function(data){ + console.debug(data); + this.ajaxCall({ + method: 'PUT', + url: '/api/users/' + this.state.username + '/trips/' + data["tripId"], + data: JSON.stringify(data), + success: function(data){ + this.getTrips(); + }.bind(this) + }) + }, + + deleteTrip: function(id){ + this.ajaxCall({ + method: 'DELETE', + url: '/api/users/' + this.state.username + '/trips/' + id, + success: function(data){ + this.getTrips(); + }.bind(this) + }) + }, + + getTripsInNextMonth: function(e){ + e.preventDefault(); + + this.ajaxCall({ + method: 'GET', + url: '/travel-plan', + success: function(data){ + window.location = '/travel-plan'; + }.bind(this) + }) + }, + + handleFromDateChange: function(e){ + console.log("newDate", e); + if(e == null && this.state.toDate == null){ + this.getTrips(); + } + return this.setState({fromDate: e}); + }, + + handleToDateChange: function(e){ + console.log("newDate", e); + if(e == null && this.state.fromDate == null){ + this.getTrips(); + } + return this.setState({toDate: e}); + }, + + filter: function(e){ + e.preventDefault(); + + if(!this.state.fromDate || !this.state.toDate) return; + + var startDate = this.state.fromDate.split('T')[0]; + var endDate = this.state.toDate.split('T')[0]; + + this.ajaxCall({ + method: 'GET', + url: '/api/users/' + this.state.username + '/trips/' + startDate + '&' + endDate, + success: function(data){ + this.setState({trips: data["trips"]}); + }.bind(this) + }) + }, + + ajaxCall: function(settings){ + settings.dataType = 'json'; + settings.contentType = 'application/json'; + + settings.error = function(xhr, status, err){ + console.error(settings.url, status, err.toString()); + if(xhr.status == 401){ + $("#loginWarning").html("Username or password wrong. If you are signing up username is taken!"); + $("#loginWarning").show(); + this.logout(); + } + }.bind(this) + + if(this.state.token != null){ + console.debug(this.state.token); + settings.beforeSend = function(xhr){ + xhr.setRequestHeader("Authorization", "JWT " + this.state.token); + }.bind(this) + } + console.debug(settings) + $.ajax(settings); + }, + + render: function(){ + if(this.state.token == null){ + return( +
+ +
+ +
+
+ ) + } + else{ + return( +
+ +
+
+
+
+
+

My Trips

+
+
+
+
+ + +
+
+ + +
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+ ) + } + } +}); + +ReactDOM.render( + , + document.getElementById('app') +); diff --git a/download.jpg b/download.jpg new file mode 100644 index 0000000..c656004 Binary files /dev/null and b/download.jpg differ diff --git a/face.jpg b/face.jpg new file mode 100644 index 0000000..3ea8b87 Binary files /dev/null and b/face.jpg differ diff --git a/face2.jpg b/face2.jpg new file mode 100644 index 0000000..b29725e Binary files /dev/null and b/face2.jpg differ diff --git a/face3.jpg b/face3.jpg new file mode 100644 index 0000000..9ea99a7 Binary files /dev/null and b/face3.jpg differ diff --git a/fasolt.jpg b/fasolt.jpg new file mode 100644 index 0000000..164529d Binary files /dev/null and b/fasolt.jpg differ diff --git a/resort1.jpg b/resort1.jpg new file mode 100644 index 0000000..acaf0bc Binary files /dev/null and b/resort1.jpg differ diff --git a/resort2.jpg b/resort2.jpg new file mode 100644 index 0000000..d3e3ceb Binary files /dev/null and b/resort2.jpg differ diff --git a/three.jpg b/three.jpg new file mode 100644 index 0000000..ef30a39 Binary files /dev/null and b/three.jpg differ diff --git a/travel - Copy.css b/travel - Copy.css new file mode 100644 index 0000000..620f83f --- /dev/null +++ b/travel - Copy.css @@ -0,0 +1,28 @@ +.navbar-nav .nav-item .nav-link { + color: darkslategray +} +.navbar-nav .nav-item.active .nav-link, +.navbar-nav .nav-item:hover .nav-link { + color: black; + font-weight: 600; + background-color: lightgrey; +} + +.caption3 { + position: absolute; + top:140px; + left:-780px; + color:black; + font-weight: bold; +} +.carousel-caption { + font-family: 'Dancing Script', cursive; +} +.page-header { + font-family: 'Lobster',cursive; + +} +.jumbotron input { +padding : 5px ; +border-radius: 12pt; +} diff --git a/travel planner.jpg b/travel planner.jpg new file mode 100644 index 0000000..a260963 Binary files /dev/null and b/travel planner.jpg differ diff --git a/travel.css b/travel.css new file mode 100644 index 0000000..151d472 --- /dev/null +++ b/travel.css @@ -0,0 +1,117 @@ +.navbar-nav .nav-item .nav-link { + color: darkslategray; + +} +.navbar-nav .nav-item.active .nav-link, +.navbar-nav .nav-item:hover .nav-link { + color: white; + font-weight: 600; + background-color: #343A40 +} + +.caption3 { + position: absolute; + top:140px; + left:-780px; + color:black; + font-weight: bold; +} +.carousel-caption { + font-family: 'Dancing Script', cursive; +} +.page-header { + font-family: 'Lobster',cursive; +} +.jumbotron{ + background: linear-gradient(#E9ECEF,white); +} + +.jumbotron input { +padding : 5px ; +border-radius: 12pt; + +} +.cards :hover{ + opacity: 0.8; +} +.cont2 { + height:60px; + background-color: #46FF46; + padding-top:20px; + font-weight: 400; + +} + +.accBtn{ + font-size: 18px; + font-weight: 300; + font-family: Arial, Helvetica, sans-serif; + color :#343A40; +} +.accBtn:hover { + color: white; + font-weight: 500; + background-color: #343A40 +} + +.question { + cursor: pointer; + font-weight: 700; +} +.map{ + margin-left:150px; + margin-right:0px; + +} +.cont3{ + background-color: black; + height:440px; + margin-right: 0; + overflow-x: hidden; + overflow-y: hidden; + +} +.contact{ + font-family: monospace; + color: white; + padding-top:30px; +} + +/* .headGreen { + background-color: rgb(70, 255, 70); +} */ +.imgR{ + border-radius: 50%; + height: 110px; + width: 110px; +} + +.fa{ + color: red; +} + +.cont4 { + border-radius: 70px; + background:linear-gradient(#E9ECEF,white); + padding:5px; +} +.cont6{ + padding:5px; + font-family: 'Dancing Script' , cursive; + font-weight: 500; + font-size: 30px; + opacity: 0.9; + background: linear-gradient(rgb(14, 13, 36),rgb(34, 34, 104)); + color: white; + width:320px; + border-radius: 120px; +} + +.cont7{ + display: grid; + grid-gap: 0px; + grid-template-columns:2fr 1fr ; + background: linear-gradient(rgb(49, 44, 44),black); + padding-top:21px; + padding-left:370px; +} diff --git a/travel.html b/travel.html new file mode 100644 index 0000000..c133ffd --- /dev/null +++ b/travel.html @@ -0,0 +1,290 @@ + + + + + + + Next Destination + + + + + + + + + + + + + +
+ +
+
+
+

Search Places

+
+ +
+
+
+
+ bg +
+
+ +

Popular Places

+

+

Whether you're looking for a cosmopolitan city, a picture-perfect island, a mountain retreat or something else entirely, the destinations on this ranking will help inspire you to book your next vacation.Plan your next trip to one of Next Destination's top vacation spots, including New York City,Orlando and Las Vegas.

+ +
+
+
+
+ bg +
+
+ +

Cheap Flights



+

Next Destination can be your best resource for finding great ticket deals and cheap flights to your favorite destinations around the world. Our sophisticated search technology makes planning your next vacation easy and hassle-free. If you're looking for affordable airfare you can find it all here.

+ +
+
+
+
+ bg +
+
+ +

Travel Smart



+

Smart Travel - Book early and save.Get various vacation deals,heavy dicounts on hotel bookings along with the information about highest rated food outlets, recreation activities nearby,Packing tips and public transport information.

+ +
+
+
+
+

+
+-Travelers'Reviews- +
+
+ +

+
+

Frequently Asked Questions(FAQs)

+

+
+
+
+

+ +

+
+
+
+
+
Q. When can I expect my refund?
+

When a reservation is cancelled the same day it was booked, funds for the Airline portion are not collected. Any pending charges you may have seen would have been a "pending hold" for verification. These funds will return to your available credit and will not reflect as a refund. This process normally takes from 3 - 7 business days, depending on your banking institutions procedures.

+
+
+
Q. I received an email advising of a refund I did not request.
+

These refunds are typically for seat assignment requests that could not be fulfilled by the Airline or during a quality check if we detected an overcharge. This refund does not affect your airline ticket purchase.

+
+
+
Q. I have duplicate charges for the same trip on my account.
+

Verify with your bank what company the charges are coming from that have posted. Most tickets issued through Next Destination will have the description of NV or Las Vegas on your statement. If you are certain there are posted duplicate charges from OneTravel, please contact the Billing Department for Assistance at 7778889991.

+
+
+
Q. I’ve been charged more than what was quoted.
+

Confirm with your bank whether the charges in question have posted or are pending to your account. At the time of reservation a "pending charge" is placed on your account for the full amount. The bank/credit card company then puts a "hold" on that dollar amount, until the transaction either posts or is cleared. With a successful transaction, the charge will typically post to the account within 2 - 3 business days, at that time the money will be deducted from your account, and the "hold" will be released. At times the "pending hold" can show on your account after the charge has posted. Please allow time for the "pending hold" to return to your available credit. This is dependent on your banking institutions policies.

+
+
+
+
+
+
+

+ +

+
+
+
+
+
Q. What is an "E" ticket?
+

E-tickets, are offered by many major airlines, and allow you to travel without a paper ticket, eliminating the worry of leaving your tickets behind. Next Destination offers e-tickets when they are available.

Bring government issued photo identification (such as a driver’s license or passport) to the airport. E-ticketed passengers must have a printed boarding pass in order to proceed directly through security for check in at the gate. Customers with check-in baggage or E-tickets who do not have printed boarding passes must go to the ticket counter prior to going through security checkpoints.

+
+
+
Q. How do I cancel this reservation?
+

Most airline tickets issued are non-refundable, and non-transferable. Name changes are not permitted. However, you may be able to exchange your tickets for different dates. Penalty fees apply and not all tickets are changeable. Please call our exchange department for details. (866) 883-0908

+
+
+
Q. What is a 'return period', and how long is it ?
+

The ‘return period’ is an amount of time referral traffic from an affiliate partner is ‘tagged’ for that specific affiliate partner. The ‘return period’ for the Next Deestination Affiliate Partner Program is 90 days.

+
+
+
+
+
+
+

+ +

+
+
+
+
+
Q. How do I file a claim?
+

The insured party should contact Seven Corners toll free number 4445551100. Be prepared with dates of travel, ticket numbers, passenger’s names and details of the reason for the claim including medical documentation if applicable.

+
+
+ +

The insurance covers the following types of emergencies.
+ Reimburses up to Rs6000 a day for reasonable additional expenses if
+ Delayed for 12 hours or more due to:
+ • Carrier delay such as mechanical difficulties or weather.
+ • Lost passport, money, or travel documents.
+ • Natural disaster.
+ • Injury or sickness of the Insured or Traveling Companion.

+
+
+ +
+

Unforeseen sickness, injury, or death of the Insured, a Traveling Companion, Immediate Family Member, or Business Partner. (Certain exclusions apply.) Requires medical documentation from a licensed M.D. Pre-existing medical conditions may be excluded.

The Insured’s principal residence being made uninhabitable by fire, flood or similar natural disaster, vandalism, or burglary.

+
    +
  • The Insured(s) being subpoenaed, required to serve on jury duty, hijacked, or quarantined.
  • +
  • Being involved in or delayed due to an automobile accident en route to departure.
  • +
  • Inclement weather that causes complete cessation of services for 24 hrs.
  • +
+
+
+
+
+

+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/travel.js b/travel.js new file mode 100644 index 0000000..ada00e8 --- /dev/null +++ b/travel.js @@ -0,0 +1,6 @@ + + + +console.log('123') +document.querySelectorAll('.answer').style.visibility="hidden" ; +