Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.27 KB | None | 0 0
  1. import React, { Component } from "react";
  2. import { Link } from "react-router-dom";
  3. import Spinner from "../components/spinner";
  4. import Icon from "../components/icon";
  5. import { ICONS } from "../components/constants";
  6. import update from 'immutability-helper';
  7. import { bookingStatus } from "../components/booking/booking_status";
  8. import { paymentMethod } from "../components/booking/payment_method";
  9. import { EPERM } from "constants";
  10.  
  11. export default class Booking extends Component {
  12. constructor(props) {
  13. super(props);
  14. this.state = {
  15. passengerNumber: null,
  16. booking: {
  17. id: "",
  18. number: "",
  19. date: "",
  20. bookingStatus: "OPCIJA",
  21. paymentMethod: "MODELA1",
  22. tripID: 1,
  23. passengers: [
  24. {
  25. id: "",
  26. holder: {
  27. email: "",
  28. address: "",
  29. mobile: ""
  30. },
  31. name: "",
  32. surname: "",
  33. passport: "",
  34. idCard: ""
  35. }
  36. ]
  37. },
  38. extras: "",
  39. totalPrice: "",
  40. trip: null,
  41. id: this.props.match.params.id
  42. };
  43. this.handleChange = this.handleChange.bind(this);
  44. this.addPassenger = this.addPassenger.bind(this);
  45. this.removePassenger = this.removePassenger.bind(this);
  46. }
  47.  
  48. checkArrayLength(){
  49. console.log(this.state.booking.passengers.length)
  50. let arrayLength = this.state.booking.passengers.length;
  51. this.setState({
  52. passengerNumber: arrayLength
  53. })
  54. }
  55.  
  56. handleChange(i, e) {
  57. let passengers = [...this.state.booking.passengers];
  58. passengers[i][e.target.name] = e.target.type === 'checkbox' ? e.target.checked : e.target.value;
  59. let passengersHolders = this.state.booking.passengers[0].holder;
  60. passengersHolders[e.target.name] = e.target.value;
  61. this.setState({ passengers, passengersHolders }, () => console.log(this.state.booking.passengers));
  62. }
  63.  
  64. addPassenger = e => {
  65. e.preventDefault();
  66. let passengersArray = [...this.state.booking.passengers];
  67. console.log(passengersArray);
  68. this.setState({
  69. passengers: [...passengersArray, {
  70. id: "",
  71. name: "",
  72. surname: "",
  73. passport: "",
  74. idCard: ""
  75. }]
  76. })
  77. this.checkArrayLength();
  78. }
  79.  
  80. removePassenger(i) {
  81. let passengers = [...this.state.booking.passengers];
  82. passengers.splice(i, 1);
  83. this.setState({
  84. passengers,
  85. passengerNumber: this.state.passengerNumber - 1
  86. });
  87. this.checkArrayLength()
  88. }
  89.  
  90. calculateTotal = () => {
  91. this.setState({
  92. totalPrice: totalPrice
  93. });
  94. };
  95.  
  96. submitBooking() {
  97. const booking = this.state;
  98. fetch("/api/passenger/create", {
  99. method: "POST",
  100. body: JSON.stringify(booking),
  101. headers: {
  102. "Content-Type": "application/json"
  103. }
  104. }).then(res => console.log("RECT"));
  105. }
  106.  
  107. componentDidMount() {
  108. fetch("/api/trips/get/" + this.state.id)
  109. .then(res => res.json())
  110. .then(trip =>
  111. this.setState(
  112. {
  113. trip
  114. },
  115. () => console.log("Trips fetched...", trip)
  116. )
  117. );
  118. this.checkArrayLength();
  119. }
  120.  
  121. render() {
  122. const isEnabled = this.state.passengerNumber < 8;
  123. const isEnabledRemove = this.state.passengerNumber === 1;
  124. if (this.state.trip && this.state.booking.passengers) {
  125. return (
  126. <div className="container">
  127. <div className="row">
  128. <div className="col-md-8">
  129. <div className="row">
  130. <div className="col-md-12">
  131. <div className="booking-from">
  132. <form onSubmit={this.handleSubmit}>
  133. <div className="booking-form__group">
  134. <h1>Rezervacija</h1>
  135.  
  136. <h5>
  137. Puno ime i prezime putnika kao što je prikazano u
  138. putovnici
  139. </h5>
  140. <small style={{ display: "block", marginBottom: 10 }}>
  141. * Maksimalni broj online rezervacija je 8
  142. </small>
  143. {this.state.booking.passengers.map((passenger, idx) => {
  144. let passengerNameId = `passengerName-${idx}`,
  145. passengerSurnameId = `age-${idx}`;
  146. return (
  147. <React.Fragment key={idx}>
  148. <div className="form-row">
  149. <div className="form-group col-md-6">
  150. <label className="has-float-label form-control-upper">
  151. <input
  152. name="name"
  153. value={this.state.booking.passengers.name}
  154. onChange={this.handleChange.bind(this, idx)}
  155. className="name form-control"
  156. placeholder="Ime"
  157. id={passengerNameId}
  158. data-id={idx}
  159. />
  160. <span>Ime</span>
  161. </label>
  162. </div>
  163. <div className="form-group col-md-5">
  164. <label className="has-float-label form-control-upper">
  165. <input
  166. name="surname"
  167. value={
  168. this.state.booking.passengers.surname
  169. }
  170. onChange={this.handleChange.bind(this, idx)}
  171. className="surname form-control"
  172. placeholder="Prezime"
  173. id={passengerSurnameId}
  174. data-id={idx}
  175. />
  176. <span>Prezime</span>
  177. </label>
  178. </div>
  179. <div className="form-group col-md-1">
  180. <button
  181. className="remove-passenger"
  182. disabled={isEnabledRemove}
  183. onClick={this.removePassenger}
  184. data-id={idx}
  185. >
  186. <Icon
  187. icon={ICONS.CIRCLEMINUS}
  188. color={"#e5223c"}
  189. size={24}
  190. />
  191. </button>
  192. </div>
  193. </div>
  194. <div className="form-row">
  195. <div className="form-group col-md-3">
  196. <label className="has-float-label">
  197. <input
  198. name="passport"
  199. value={
  200. this.state.booking.passengers.passport
  201. }
  202. onChange={this.handleChange.bind(this, idx)}
  203. className="form-control"
  204. placeholder="Putovnica"
  205. type="number"
  206. maxLength="9"
  207. />
  208. <span>Putovnica</span>
  209. </label>
  210. </div>
  211. <div className="form-group col-md-3">
  212. <label className="has-float-label">
  213. <input
  214. name="idCard"
  215. value={
  216. this.state.booking.passengers.idCard
  217. }
  218. onChange={this.handleChange.bind(this, idx)}
  219. className="form-control"
  220. placeholder="Osobna iskaznica"
  221. maxLength="9"
  222. />
  223. <span>Osobna iskaznica</span>
  224. </label>
  225. </div>
  226. </div>
  227. <div className="form-row">
  228. <div className="form-group col-md-12">
  229. <div className="form-check">
  230. <label className="form-check-label">
  231. <input
  232. className="form-check-input"
  233. type="checkbox"
  234. checked={this.state.insuranceCheck}
  235. />
  236. Polica putnog zdravstvenog osiguranja?{" "}
  237. {this.state.trip.insurance},00 kn
  238. </label>
  239. </div>
  240. <div
  241. className="form-check"
  242. style={{ marginBottom: 5 }}
  243. >
  244. <label className="form-check-label">
  245. <input
  246. className="form-check-input"
  247. type="checkbox"
  248. checked={this.state.insuranceExtraCheck}
  249. />
  250. Polica putnog putnog osiguranja od otkaza?{" "}
  251. {this.state.trip.insuranceExtra},00 kn
  252. </label>
  253. </div>
  254. </div>
  255. </div>
  256. </React.Fragment>
  257. );
  258. })}
  259. <button
  260. className="btn"
  261. disabled={!isEnabled}
  262. onClick={this.addPassenger}
  263. >
  264. <Icon icon={ICONS.USERPLUS} size={16} /> Dodaj novog
  265. putnika
  266. </button>
  267. </div>
  268. <div className="booking-form__group">
  269. <h4 className="booking-form__group-title">
  270. Kontakt podaci nositelja rezervacije
  271. </h4>
  272. <div className="form-group">
  273. <label className="has-float-label">
  274. <input
  275. name="email"
  276. value={this.state.booking.passengers[0].holder.email}
  277. onChange={this.handleChange.bind(this, 0)}
  278. className="form-control"
  279. placeholder="Email"
  280. />
  281. <span>Email</span>
  282. </label>
  283. </div>
  284. <div className="form-group">
  285. <label className="has-float-label">
  286. <input
  287. name="address"
  288. value={this.state.booking.passengers[0].holder.address}
  289. onChange={this.handleChange.bind(this, 0)}
  290. className="form-control"
  291. placeholder="Adresa"
  292. />
  293. <span>Adresa</span>
  294. </label>
  295. </div>
  296. <div className="form-group">
  297. <label className="has-float-label">
  298. <input
  299. name="mobile"
  300. value={this.state.booking.passengers[0].holder.mobile}
  301. onChange={this.handleChange.bind(this, 0)}
  302. className="form-control"
  303. placeholder="Mobitel"
  304. />
  305. <span>Mobitel</span>
  306. </label>
  307. <small>
  308. Mobitel napišite u obliku +3850123456789
  309. </small>
  310. </div>
  311. </div>
  312.  
  313. <div className="booking-form__group">
  314. <h4 className="booking-form__group-title">
  315. Model plaćanja
  316. </h4>
  317. <div className="form-group">
  318. <select className="custom-select" required>
  319. <option value="">Model plaćanja</option>
  320. <option value="1">Model A1</option>
  321. <option value="1">Model A2</option>
  322. <option value="1">Model A3</option>
  323. <option value="2">Model A4</option>
  324. <option value="3">Model A5</option>
  325. </select>
  326. <div className="invalid-feedback">
  327. Example invalid custom select feedback
  328. </div>
  329. <div className="option-feedback booking-form__options-description">
  330. <h5>MODEL A1</h5>
  331. <div>
  332. <div>
  333. Gotovinsko plaćanje u jednakim obrocima na žiro
  334. račun ICHTIS TRAVEL agencije:
  335. </div>
  336. <div>IBAN: HR53 2402006 1100419357</div>
  337. <div>
  338. + POZIV NA BROJ: {this.state.trip.tripCode}
  339. </div>
  340. <div>
  341. Za uplatu depozita popuniti uplatnicu na gore
  342. navedeni žiro račun i iznos.
  343. </div>
  344. <div>
  345. Uplatnice za preostale rate biti će otisnute i
  346. dostavljene na adresu koju ste nam naveli u
  347. obrascu.
  348. </div>
  349. </div>
  350. </div>
  351. </div>
  352. </div>
  353. <div className="booking-form__group">
  354. <p>
  355. Upoznat(a) sam i suglasn(a) s opisanim uvijetima
  356. putovanja u privitku, odredbama ugovora i općim
  357. uvjetima organizacije aranžmana, te ponudom osiguranja
  358. opisanom u uvjetima korištenja i odredbama. *
  359. </p>
  360. <p>
  361. Vaši osobni podaci bit će korišteni za obradu vaše
  362. narudžbe, podršku vašem iskustvu na ovoj web stranici
  363. i za druge svrhe opisane u našim pravilima
  364. privatnosti.
  365. </p>
  366. <label className="form-check-label">
  367. <input className="form-check-input" type="checkbox" />
  368. Pročitao/la sam i slažem se s{" "}
  369. <Link to="/opci-uvjeti">uvjetima korištenja</Link> i
  370. odredbama web-stranice. *
  371. </label>
  372. </div>
  373. {/* <input className="btn" type="submit" value="Submit" /> */}
  374. </form>
  375. </div>
  376. </div>
  377. </div>
  378. </div>
  379. <div className="col-md-4">
  380. <div className="booking-sidebar">
  381. <div className="booking-form__description">
  382. <span>{this.state.trip.title}</span>
  383. <span>Polazak: {this.state.trip.departureDate}</span>
  384. <span>Dolazak: {this.state.trip.arrivalDate}</span>
  385. <span>Trjanje: 8 dana</span>
  386. <span>Odredište: {this.state.trip.destination}</span>
  387. </div>
  388. <span>
  389. Cijena po osobi: {this.state.trip.price}
  390. ,00 kn
  391. </span>
  392. <hr />
  393. <span>
  394. Dodatne usluge
  395. <span>Polica putnog osiguranja:</span>
  396. <span>
  397. {
  398. (this.state.extras =
  399. this.state.trip.insurance * this.state.passengerNumber)
  400. }
  401. </span>
  402. </span>
  403. <hr />
  404. <span>
  405. <h5>Ukupno:</h5>{" "}
  406. {
  407. (this.state.totalPrice =
  408. this.state.trip.price * this.state.passengerNumber)
  409. }
  410. ,00 kn{" "}
  411. </span>
  412. <input
  413. className="btn"
  414. style={{ width: "100%" }}
  415. type="submit"
  416. value="Rezerviraj"
  417. />
  418. </div>
  419. </div>
  420. </div>
  421. </div>
  422. );
  423. } else {
  424. return <Spinner />;
  425. }
  426. }
  427. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement