progress.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. date_default_timezone_set("Australia/Hobart");
  3. //error_reporting(E_ERROR | E_PARSE);
  4. error_reporting(E_ALL);
  5. ini_set('display_errors', '0');
  6. ini_set('log_errors', '1');
  7. require_once 'connection.php';
  8. include_once "vendor/autoload.php";
  9. $accessToken = getenv('HUBSPOT_TOKEN') ?: '';
  10. $enquiry_date = date("l dS M \'y");
  11. $drg = isset($_GET['drg']) ? (int)$_GET['drg'] : 0;
  12. if (!empty($_GET['drg'])) {
  13. include "table.php";
  14. }
  15. ?>
  16. <!doctype html>
  17. <html lang="en">
  18. <head>
  19. <meta charset="utf-8">
  20. <meta name="viewport" content="width=device-width, initial-scale=1">
  21. <title><?php echo $drg ? "{$drg} - " : ''; ?>Payment Plan Tracker</title>
  22. <link rel="shortcut icon" href="images/blueprint.ico" type="image/x-icon">
  23. <link href="css/bootstrap.css" rel="stylesheet">
  24. <link href="css/blueprint.css" rel="stylesheet">
  25. <link href="css/print.css" rel="stylesheet" media="print">
  26. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
  27. <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
  28. <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  29. <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
  30. <script type="text/javascript" src="https://use.fontawesome.com/1e2844bb90.js"></script>
  31. <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>
  32. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-throttle-debounce/1.1/jquery.ba-throttle-debounce.min.js" integrity="sha512-JZSo0h5TONFYmyLMqp8k4oPhuo6yNk9mHM+FY50aBjpypfofqtEWsAgRDQm94ImLCzSaHeqNvYuD9382CEn2zw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  33. </head>
  34. <body>
  35. <nav class="navbar bg-brown-dark brown-light border-bottom border-body d-print-none" data-bs-theme="dark">
  36. <div class="container-fluid">
  37. <a class="navbar-brand brown-light" href="dashboard.php">
  38. <img src="images/blueprint-logo-light.png" alt="Logo" width="30" height="24" class="d-inline-block align-text-top">
  39. Modulos Design
  40. </a>
  41. <div class="ms-auto d-flex gap-2">
  42. <a href="dashboard.php" class="btn btn-sm btn-outline-light"><i class="bi bi-grid-fill"></i> Dashboard</a>
  43. <?php if (!empty($drg)): ?><a href="client-brief.php?drg=<?= (int)$drg ?>" class="btn btn-sm btn-outline-light"><i class="bi bi-person-fill"></i> Client Brief</a><?php endif; ?>
  44. </div>
  45. </div>
  46. </nav>
  47. <div class="container">
  48. <div class="row pt-2">
  49. <div class="col-sm-4 col-md-4 pt-3">
  50. <img class="img-fluid logo pt-2" src="images/blueprint-full-logo-medium.png" alt="Blueprint Studio">
  51. </div>
  52. <div class="col-sm-4 col-md-4 m-auto text-center">
  53. <h3 class="architect text-center">Job: <?php echo $drg; ?></h3>
  54. </div>
  55. <div class="col-sm-4 col-md-4 text-end pt-3">
  56. <h2 class="fw-bold text-end mb-1">Client Onboarding Form</h2>
  57. <h4 class="text-end mb-1">
  58. <span class="fw-bold brown-two"><?php echo $enquiry_date; ?></span>
  59. </h4>
  60. </div>
  61. </div>
  62. <div class="row">
  63. <div class="col-12">
  64. <div class="row ">
  65. <div class="col ">
  66. <h4 class="fw-bold">Client Details</h4>
  67. </div>
  68. </div>
  69. <div class="mb-1">
  70. <div class="row ">
  71. <div class="col-6 col-md-3">
  72. <label for="firstname" class="form-label form-label-sm p-0 m-0">Clients Name</label>
  73. <input type="text" class="form-control form-control-sm savable-text-field architect brown-four" name="firstname" id="firstname" tabindex="1" value="<?php echo $firstname; ?>" placeholder="First Name" autocomplete="given-name">
  74. </div>
  75. <div class="col-6 col-md-3">
  76. <label for="lastname" class="form-label form-label-sm p-0 m-0"></label>
  77. <input type="text" class="form-control form-control-sm savable-text-field architect brown-four" name="lastname" id="lastname" tabindex="2" value="<?php echo $lastname; ?>" placeholder="Last Name" autocomplete="family-name">
  78. </div>
  79. <div class="col-12 col-md-6">
  80. <label for="joint_name" class="form-label form-label-sm p-0 m-0">T/As - Joint Names</label>
  81. <input type="text" class="form-control form-control-sm savable-text-field architect brown-three" name="joint_name" id="joint_name" value="<?php echo $joint_name; ?>" tabindex="3">
  82. </div>
  83. </div>
  84. </div>
  85. <div class="mb-1">
  86. <label for="postal_address" class="form-label form-label-sm p-0 m-0">Clients Postal Address</label>
  87. <input type="text" class="form-control form-control-sm fw-bold savable-text-field architect brown-three map-autocomplete" id="postal_address" name="postal_address" value="<?php echo $postal_address; ?>" onFocus="geolocate(this)" tabindex="4" autocomplete="on">
  88. </div>
  89. <div class="mb-1">
  90. <div class="row ">
  91. <div class="col-md-6">
  92. <label for="phoneNumber" class="form-label form-label-sm p-0 m-0">Clients Mobile</label>
  93. <input type="phone" class="form-control form-control-sm savable-text-field architect brown-three" minlength="12" id="phoneNumber" name="client_mobile" value="<?php echo $client_mobile; ?>" required onkeyup="check(); return false;" tabindex="5" autocomplete="tel">
  94. </div>
  95. <div class="col-md-6">
  96. <label for="client_email" class="form-label form-label-sm p-0 m-0">Email address</label>
  97. <input type="email" class="form-control form-control-sm savable-text-field architect brown-three" name="client_email" id="client_email" value="<?php echo $client_email; ?>" tabindex="6" autocomplete="email">
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="row mt-3">
  103. <div class="col-md-2">Item</div>
  104. <div class="col-md-7">Description</div>
  105. <div class="col">Price</div>
  106. </div>
  107. <hr>
  108. <?php
  109. $checkRecord = mysqli_query($con, "SELECT * FROM `progress_payments` WHERE `drg` = '{$drg}' " );
  110. $rowcount = mysqli_num_rows($checkRecord);
  111. $result = mysqli_query($con, "SELECT *, @curRow := @curRow + 1 AS position FROM `progress_payments` JOIN (SELECT @curRow := 0) r WHERE `drg` = '{$drg}' ");
  112. if (!$result) {
  113. printf("Error: %s\n", mysqli_error($con));
  114. exit();
  115. }
  116. while ($row = mysqli_fetch_array($result)) {
  117. echo "<div class='mb-1 row justify-content-start'>";
  118. echo "<label for='description' class='col-1 col-form-label'>" . (int)$row['position'] . "</label>";
  119. echo "<input type='hidden' id='progress' v-model='progress' value='" . (int)$row['position'] . "'>";
  120. echo "<div class='col-sm-7'>";
  121. echo "<input type='text' class='form-control' id='description' v-model='description' value='" . htmlspecialchars($row['description'], ENT_QUOTES, 'UTF-8') . "' disabled>";
  122. echo "</div>";
  123. echo "<div class='col-sm-2'>";
  124. echo "<input type='text' class='form-control' id='paid' v-model='paid' value='" . htmlspecialchars($row['paid'], ENT_QUOTES, 'UTF-8') . "' disabled>";
  125. echo "</div>";
  126. echo "<div class='col-sm-2'>";
  127. echo "<input type='currency' class='form-control' id='value' v-model='value' value='" . htmlspecialchars($row['value'], ENT_QUOTES, 'UTF-8') . "' disabled>";
  128. echo "</div>";
  129. echo "</div>";
  130. }
  131. ?>
  132. <div id="progress_payments">
  133. </div>
  134. <div class="row justify-content-end">
  135. <div class="">
  136. <button id="btn" class="btn btn-sm btn-block bg-brown-three brown-five col-3">Add Item</button>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. <script>
  142. var count= <?php echo $rowcount + 1; ?>;
  143. $("#btn").click(function(){
  144. $("#progress_payments").append(addNewRow(count));
  145. count++;
  146. });
  147. function addNewRow(count){
  148. var newrow='<div class="mb-1 row justify-content-start">'+
  149. '<label for="description" class="col-1 col-form-label">'+count+'</label>'+
  150. '<input type="hidden" id="progress" v-model="progress" value="+count+">'+
  151. '<div class="col-sm-9">'+
  152. '<input type="text" class="form-control" id="description" v-model="description">'+
  153. '</div>'+
  154. '<div class="col-sm-2">'+
  155. '<input type="currency" class="form-control" id="value" v-model="value">'+
  156. '</div>'+
  157. '</div>';
  158. return newrow;
  159. }
  160. var currencyInput = document.querySelector('input[type="currency"]')
  161. var currency = 'AUD' // https://www.currency-iso.org/dam/downloads/lists/list_one.xml
  162. // format inital value
  163. onBlur({target:currencyInput})
  164. // bind event listeners
  165. currencyInput.addEventListener('focus', onFocus)
  166. currencyInput.addEventListener('blur', onBlur)
  167. function localStringToNumber( s ){
  168. return Number(String(s).replace(/[^0-9.,-]+/g,""))
  169. }
  170. function onFocus(e){
  171. var value = e.target.value;
  172. e.target.value = value ? localStringToNumber(value) : ''
  173. }
  174. function onBlur(e){
  175. var value = e.target.value
  176. var options = {
  177. maximumFractionDigits : 2,
  178. currency : currency,
  179. style : "currency",
  180. currencyDisplay : "symbol"
  181. }
  182. e.target.value = (value || value === 0)
  183. ? localStringToNumber(value).toLocaleString(undefined, options)
  184. : ''
  185. }
  186. </script>
  187. <hr>
  188. <footer class="footer">
  189. <p class="text-center">&copy; <?php echo date('Y'); ?> - Modulos Design</p>
  190. </footer>
  191. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
  192. <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB-QceOYrDe9otynMmQ9iNF3yEZzbpsanM&libraries=places&callback=initAutocomplete" async defer></script>
  193. <script src="https://cdn.jsdelivr.net/npm/signature_pad@4.0.0/dist/signature_pad.umd.min.js"></script>
  194. <script src="js/signature.js" ></script>
  195. <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>
  196. <script async defer src="https://accounts.google.com/gsi/client" onload="gisLoaded()"></script>
  197. </body>
  198. </html>