Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

489 righe
30 KiB

  1. import React from 'react';
  2. import * as Icon from 'react-feather';
  3. import {
  4. Accordion,
  5. AccordionItem,
  6. AccordionItemHeading,
  7. AccordionItemPanel,
  8. AccordionItemButton
  9. } from 'react-accessible-accordion';
  10. //library yarn
  11. import NumberFormat from 'react-number-format';
  12. //sweet alert
  13. import swal from 'sweetalert';
  14. const CheckoutContent = function ({ backend, checkout_product, user, provinces, ...props }) {
  15. const [formValue, setFormValue] = React.useState({
  16. order_id: "",
  17. product_name: "",
  18. product_color: "",
  19. product_quantity: "",
  20. product_price: "",
  21. product_courier: "JNE",
  22. cust_name: "",
  23. cust_telp: "",
  24. cust_email: "",
  25. cust_postCode: "",
  26. cust_address: "",
  27. cust_village: "",
  28. cust_district: "",
  29. cust_city: "",
  30. cust_province: "",
  31. note: "",
  32. });
  33. return (
  34. <>
  35. <div className="checkout-area ptb-80">
  36. <div className="container">
  37. <div className="row">
  38. <div className="col-lg-12 col-md-12">
  39. <div className="user-actions">
  40. <Icon.Edit />
  41. <span>Returning customer? <a href="#">Click here to login</a></span>
  42. </div>
  43. </div>
  44. </div>
  45. <form
  46. onSubmit={async (e) => {
  47. e.preventDefault();
  48. var newformValue = {
  49. ...formValue,
  50. order_id: checkout_product[0].transaction_id,
  51. product_name: checkout_product[0].product_name,
  52. product_color: checkout_product[0].product_color,
  53. product_quantity: checkout_product[0].product_quantity,
  54. product_price: checkout_product[0].product_total,
  55. }
  56. setFormValue(newformValue)
  57. console.log(JSON.stringify(newformValue));
  58. const response = await fetch(
  59. "/api/transaction/create",
  60. {
  61. method: "POST",
  62. headers: {
  63. 'Content-Type': 'application/json'
  64. },
  65. body: JSON.stringify(newformValue),
  66. }
  67. );
  68. if (response.ok) {
  69. var res = await response.json();
  70. console.log("cek response :", res);
  71. if (res["STATUS"] === 1) {
  72. res["DATA"]["transaction"];
  73. swal("Produk Berhasil Ditambah ke Keranjang", "Silahkan Cek Keranjang Belanja Anda", "success");
  74. // router.push("/yamaha/Shop/Cart");
  75. }
  76. else {
  77. swal("Produk Gagal Ditambah ke Keranjang", "Silahkan Coba Lagi", "error");
  78. }
  79. } else {
  80. swal("Transaksi Gagal", "Silahkan Coba Lagi", "error");
  81. }
  82. return false;
  83. }}
  84. >
  85. <div className="row">
  86. <div className="col-lg-6 col-md-12">
  87. <div className="billing-details">
  88. <h3 className="title">Alamat Pengiriman</h3>
  89. <div className="row">
  90. <div className="col-lg-6 col-md-6">
  91. <div className="form-group">
  92. <label>Nama Lengkap <span className="required">*</span></label>
  93. <input
  94. name="cust_name"
  95. type="text"
  96. className="form-control"
  97. onInput={(e) => {
  98. setFormValue({
  99. ...formValue,
  100. cust_name: e.target.value.toString(),
  101. })
  102. }}
  103. />
  104. </div>
  105. </div>
  106. <div className="col-lg-6 col-md-6">
  107. <div className="form-group">
  108. <label>Nomer Telpon <span className="required">*</span></label>
  109. <input
  110. name="cust_telp"
  111. type="text"
  112. className="form-control"
  113. onInput={(e) => {
  114. setFormValue({
  115. ...formValue,
  116. cust_telp: e.target.value.toString(),
  117. })
  118. }}
  119. />
  120. </div>
  121. </div>
  122. <div className="col-lg-6 col-md-6">
  123. <div className="form-group">
  124. <label>Email <span className="required">*</span></label>
  125. <input
  126. name="cust_email"
  127. type="email"
  128. className="form-control"
  129. onInput={(e) => {
  130. setFormValue({
  131. ...formValue,
  132. cust_email: e.target.value.toString(),
  133. })
  134. }}
  135. />
  136. </div>
  137. </div>
  138. <div className="col-lg-6 col-md-6">
  139. <div className="form-group">
  140. <label>Kode Pos <span className="required">*</span></label>
  141. <input
  142. name="cust_postCode"
  143. type="text"
  144. className="form-control"
  145. onInput={(e) => {
  146. setFormValue({
  147. ...formValue,
  148. cust_postCode: e.target.value.toString(),
  149. })
  150. }}
  151. />
  152. </div>
  153. </div>
  154. <div className="col-lg-12 col-md-12">
  155. <div className="form-group">
  156. <label>Alamat Lengkap <span className="required">*</span></label>
  157. <textarea
  158. name="cust_address"
  159. cols="30" rows="4"
  160. className="form-control"
  161. onInput={(e) => {
  162. setFormValue({
  163. ...formValue,
  164. cust_address: e.target.value.toString(),
  165. })
  166. }}
  167. ></textarea>
  168. </div>
  169. </div>
  170. <div className="col-lg-6 col-md-6">
  171. <div className="form-group">
  172. <label>Kelurahan / Desa <span className="required">*</span></label>
  173. <input
  174. name="cust_village"
  175. type="text"
  176. className="form-control"
  177. onInput={(e) => {
  178. setFormValue({
  179. ...formValue,
  180. cust_village: e.target.value.toString(),
  181. })
  182. }}
  183. />
  184. </div>
  185. </div>
  186. <div className="col-lg-6 col-md-6">
  187. <div className="form-group">
  188. <label>Kecamatan <span className="required">*</span></label>
  189. <input
  190. name="cust_district"
  191. type="text"
  192. className="form-control"
  193. onInput={(e) => {
  194. setFormValue({
  195. ...formValue,
  196. cust_district: e.target.value.toString(),
  197. })
  198. }}
  199. />
  200. </div>
  201. </div>
  202. <div className="col-lg-6 col-md-6">
  203. <div className="form-group">
  204. <label>Kabupaten / Kota <span className="required">*</span></label>
  205. <input
  206. name="cust_city"
  207. type="text"
  208. className="form-control"
  209. onInput={(e) => {
  210. setFormValue({
  211. ...formValue,
  212. cust_city: e.target.value.toString(),
  213. })
  214. }}
  215. />
  216. </div>
  217. </div>
  218. <div className="col-lg-6 col-md-6">
  219. <div className="form-group">
  220. <label>Provinsi <span className="required">*</span></label>
  221. <input
  222. name="cust_province"
  223. type="text"
  224. className="form-control"
  225. onInput={(e) => {
  226. setFormValue({
  227. ...formValue,
  228. cust_province: e.target.value.toString(),
  229. })
  230. }}
  231. />
  232. </div>
  233. </div>
  234. {/* <div className="col-lg-6 col-md-6">
  235. <div className="form-group">
  236. <label>Provinsi <span className="required">*</span></label>
  237. <div className="select-box">
  238. <select className="form-select">
  239. {provinces["provinsi"].map((option) => (
  240. <option value={option.id}>{option.nama}</option>
  241. ))}
  242. </select>
  243. </div>
  244. </div>
  245. </div> */}
  246. {/* <div className="col-lg-12 col-md-12">
  247. <div className="form-check">
  248. <input type="checkbox" className="form-check-input" id="create-an-account" />
  249. <label className="form-check-label" htmlFor="create-an-account">Create an account?</label>
  250. </div>
  251. </div>
  252. <div className="col-lg-12 col-md-12">
  253. <div className="form-check">
  254. <input type="checkbox" className="form-check-input" id="ship-different-address" />
  255. <label className="form-check-label" htmlFor="ship-different-address">Ship to a different address?</label>
  256. </div>
  257. </div> */}
  258. <div className="col-lg-12 col-md-12">
  259. <div className="form-group">
  260. <textarea
  261. name="note"
  262. id="notes"
  263. cols="30" rows="4"
  264. placeholder="Order Notes"
  265. className="form-control"
  266. onInput={(e) => {
  267. setFormValue({
  268. ...formValue,
  269. note: e.target.value.toString(),
  270. })
  271. }}
  272. ></textarea>
  273. </div>
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. <div className="col-lg-6 col-md-6">
  279. <div className="order-details">
  280. <h3 className="title">Metode Pengiriman</h3>
  281. <div className="order-table table-responsive">
  282. <div className="services-details">
  283. <div className="services-details-desc">
  284. <div className="services-details-accordion">
  285. <Accordion>
  286. <AccordionItem uuid="a">
  287. <AccordionItemHeading>
  288. <AccordionItemButton>
  289. <span> JNE </span><br />
  290. <p style={{ marginLeft: "25px" }}>
  291. Akan diterima pada tanggal 13 - 16 Nov <br />
  292. </p>
  293. </AccordionItemButton>
  294. </AccordionItemHeading>
  295. <AccordionItemPanel>
  296. <p>Pilih Waktu Pengiriman</p>
  297. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  298. <span htmlFor="kantor"> Pengiriman Setiap Saat </span><br />
  299. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  300. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  301. <span htmlFor="kantor"> Pengiriman Pada Jam Kantor </span><br />
  302. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  303. </AccordionItemPanel>
  304. </AccordionItem>
  305. <AccordionItem uuid="b">
  306. <AccordionItemHeading>
  307. <AccordionItemButton>
  308. <span> Kargo - JNE Trucking (JTR) </span><br />
  309. <p style={{ marginLeft: "25px" }}>
  310. Akan diterima pada tanggal 14 - 17 Nov <br />
  311. </p>
  312. </AccordionItemButton>
  313. </AccordionItemHeading>
  314. <AccordionItemPanel>
  315. <p>Pilih Waktu Pengiriman</p>
  316. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  317. <span htmlFor="kantor"> Pengiriman Setiap Saat </span><br />
  318. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  319. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  320. <span htmlFor="kantor"> Pengiriman Pada Jam Kantor </span><br />
  321. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  322. </AccordionItemPanel>
  323. </AccordionItem>
  324. <AccordionItem uuid="c">
  325. <AccordionItemHeading>
  326. <AccordionItemButton>
  327. <span> Next Day </span><br />
  328. <p style={{ marginLeft: "25px" }}>
  329. Akan diterima pada tanggal 13 - 14 Nov <br /> </p>
  330. </AccordionItemButton>
  331. </AccordionItemHeading>
  332. <AccordionItemPanel>
  333. <p>Pilih Waktu Pengiriman</p>
  334. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  335. <span htmlFor="kantor"> Pengiriman Setiap Saat </span><br />
  336. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  337. <input type="radio" id="kantor" name="radio-group" defaultChecked />
  338. <span htmlFor="kantor"> Pengiriman Pada Jam Kantor </span><br />
  339. <span htmlFor="kantor" style={{ marginLeft: "17px" }}> Disarankan untuk alamat rumah </span><br /><br />
  340. </AccordionItemPanel>
  341. </AccordionItem>
  342. </Accordion>
  343. </div>
  344. </div>
  345. </div>
  346. </div>
  347. </div>
  348. <br />
  349. <div className="order-details">
  350. <h3 className="title">Pesanan Anda</h3>
  351. <div className="order-table table-responsive">
  352. <table className="table table-bordered">
  353. <thead align="center">
  354. <tr>
  355. <th scope="col">Nama Produk</th>
  356. <th scope="col">Jumlah</th>
  357. <th scope="col">Total</th>
  358. </tr>
  359. </thead>
  360. <tbody align="center">
  361. {checkout_product.length ? checkout_product.map(data => (
  362. <tr key={data.id}>
  363. <td className="product-name">
  364. <a>{data.product_name}</a>
  365. </td>
  366. <td className="product-name">
  367. <a>{data.product_quantity} Unit</a>
  368. </td>
  369. <td className="product-total">
  370. <span className="subtotal-amount">
  371. <NumberFormat
  372. name="product_total"
  373. value={data.product_total}
  374. displayType={'text'} thousandSeparator={true}
  375. prefix={'Rp. '}
  376. />
  377. </span>
  378. </td>
  379. </tr>
  380. )) : (
  381. <tr>
  382. <td colSpan="5" className="text-center">Tidak Ada Product di Keranjang</td>
  383. </tr>
  384. )}
  385. </tbody>
  386. <tbody align="center">
  387. <tr align="center">
  388. <td className="order-subtotal">
  389. <span>Cart Subtotal</span>
  390. </td>
  391. <td className="shipping-price">
  392. <span></span>
  393. </td>
  394. <td className="order-subtotal-price">
  395. <span className="order-subtotal-amount">10$2.00</span>
  396. </td>
  397. </tr>
  398. <tr>
  399. <td className="order-shipping">
  400. <span>Shipping</span>
  401. </td>
  402. <td className="shipping-price">
  403. <span></span>
  404. </td>
  405. <td className="shipping-price">
  406. <span>$5.00</span>
  407. </td>
  408. </tr>
  409. <tr>
  410. <td className="total-price">
  411. <span>Order Total</span>
  412. </td>
  413. <td className="shipping-price">
  414. <span></span>
  415. </td>
  416. <td className="product-subtotal">
  417. <span className="subtotal-amount">$215.00</span>
  418. </td>
  419. </tr>
  420. </tbody>
  421. </table>
  422. </div>
  423. {/* <div className="payment-method">
  424. <p>
  425. <input type="radio" id="direct-bank-transfer" name="radio-group" defaultChecked />
  426. <label htmlFor="direct-bank-transfer">Direct Bank Transfer</label>
  427. Make your payment directly into our bank account. Please use your Order ID as the payment reference. Your order will not be shipped until the funds have cleared in our account.
  428. </p>
  429. <p>
  430. <input type="radio" id="paypal" name="radio-group" />
  431. <label htmlFor="paypal">PayPal</label>
  432. </p>
  433. <p>
  434. <input type="radio" id="cash-on-delivery" name="radio-group" />
  435. <label htmlFor="cash-on-delivery">Cash on Delivery</label>
  436. </p>
  437. </div> */}
  438. <button type="submit" className="btn btn-primary order-btn">Lanjutkan Pembayaran</button>
  439. </div>
  440. </div>
  441. </div>
  442. </form>
  443. </div>
  444. </div>
  445. </>
  446. )
  447. }
  448. export default CheckoutContent;