journal_entries.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. header("Access-Control-Allow-Origin: *");
  3. header("Content-Type: application/json; charset=UTF-8");
  4. header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
  5. header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
  6. if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  7. exit(0);
  8. }
  9. require_once __DIR__ . '/../config/database.php';
  10. require_once __DIR__ . '/../models/JournalEntry.php';
  11. require_once __DIR__ . '/../models/AccountTransaction.php';
  12. $database = new Database();
  13. $db = $database->getConnection();
  14. $journalEntry = new JournalEntry($db);
  15. $accountTransaction = new AccountTransaction($db);
  16. $request_method = $_SERVER['REQUEST_METHOD'];
  17. switch($request_method) {
  18. case 'GET':
  19. if(isset($_GET['id'])) {
  20. $journalEntry->id = $_GET['id'];
  21. $journalEntry->readOne();
  22. if($journalEntry->entry_number != null) {
  23. $entry_arr = array(
  24. "id" => $journalEntry->id,
  25. "entry_number" => $journalEntry->entry_number,
  26. "entry_date" => $journalEntry->entry_date,
  27. "description" => $journalEntry->description,
  28. "reference_number" => $journalEntry->reference_number,
  29. "created_at" => $journalEntry->created_at,
  30. "updated_at" => $journalEntry->updated_at,
  31. "transactions" => $journalEntry->getTransactions($journalEntry->id)
  32. );
  33. http_response_code(200);
  34. echo json_encode($entry_arr);
  35. } else {
  36. http_response_code(404);
  37. echo json_encode(array("message" => "Journal entry not found."));
  38. }
  39. } else {
  40. $stmt = $journalEntry->read();
  41. $num = $stmt->rowCount();
  42. if($num > 0) {
  43. $entries_arr = array();
  44. $entries_arr["records"] = array();
  45. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  46. extract($row);
  47. $entry_item = array(
  48. "id" => $id,
  49. "entry_number" => $entry_number,
  50. "entry_date" => $entry_date,
  51. "description" => $description,
  52. "reference_number" => $reference_number,
  53. "created_at" => $created_at,
  54. "updated_at" => $updated_at
  55. );
  56. array_push($entries_arr["records"], $entry_item);
  57. }
  58. http_response_code(200);
  59. echo json_encode($entries_arr);
  60. } else {
  61. http_response_code(200);
  62. echo json_encode(array("records" => array()));
  63. }
  64. }
  65. break;
  66. case 'POST':
  67. $data = json_decode(file_get_contents("php://input"));
  68. if(!empty($data->entry_date)) {
  69. $journalEntry->entry_number = $data->entry_number ?? $journalEntry->generateEntryNumber();
  70. $journalEntry->entry_date = $data->entry_date;
  71. $journalEntry->description = $data->description ?? '';
  72. $journalEntry->reference_number = $data->reference_number ?? '';
  73. if($journalEntry->create()) {
  74. $entry_id = $this->conn->lastInsertId();
  75. // Create account transactions if provided
  76. if(isset($data->transactions) && is_array($data->transactions)) {
  77. foreach($data->transactions as $transaction) {
  78. $accountTransaction->journal_entry_id = $entry_id;
  79. $accountTransaction->account_id = $transaction->account_id;
  80. $accountTransaction->debit_amount = $transaction->debit_amount ?? 0;
  81. $accountTransaction->credit_amount = $transaction->credit_amount ?? 0;
  82. $accountTransaction->description = $transaction->description ?? '';
  83. if(!$accountTransaction->create()) {
  84. http_response_code(503);
  85. echo json_encode(array("message" => "Unable to create account transaction."));
  86. return;
  87. }
  88. }
  89. }
  90. http_response_code(201);
  91. echo json_encode(array("message" => "Journal entry was created."));
  92. } else {
  93. http_response_code(503);
  94. echo json_encode(array("message" => "Unable to create journal entry."));
  95. }
  96. } else {
  97. http_response_code(400);
  98. echo json_encode(array("message" => "Unable to create journal entry. Entry date is required."));
  99. }
  100. break;
  101. case 'PUT':
  102. $data = json_decode(file_get_contents("php://input"));
  103. if(!empty($data->id) && !empty($data->entry_date)) {
  104. $journalEntry->id = $data->id;
  105. $journalEntry->entry_number = $data->entry_number;
  106. $journalEntry->entry_date = $data->entry_date;
  107. $journalEntry->description = $data->description ?? '';
  108. $journalEntry->reference_number = $data->reference_number ?? '';
  109. if($journalEntry->update()) {
  110. // Update account transactions if provided
  111. if(isset($data->transactions) && is_array($data->transactions)) {
  112. // Delete existing transactions for this entry
  113. $delete_query = "DELETE FROM account_transactions WHERE journal_entry_id = ?";
  114. $delete_stmt = $this->conn->prepare($delete_query);
  115. $delete_stmt->bindParam(1, $data->id);
  116. $delete_stmt->execute();
  117. // Create new transactions
  118. foreach($data->transactions as $transaction) {
  119. $accountTransaction->journal_entry_id = $data->id;
  120. $accountTransaction->account_id = $transaction->account_id;
  121. $accountTransaction->debit_amount = $transaction->debit_amount ?? 0;
  122. $accountTransaction->credit_amount = $transaction->credit_amount ?? 0;
  123. $accountTransaction->description = $transaction->description ?? '';
  124. if(!$accountTransaction->create()) {
  125. http_response_code(503);
  126. echo json_encode(array("message" => "Unable to create account transaction."));
  127. return;
  128. }
  129. }
  130. }
  131. http_response_code(200);
  132. echo json_encode(array("message" => "Journal entry was updated."));
  133. } else {
  134. http_response_code(503);
  135. echo json_encode(array("message" => "Unable to update journal entry."));
  136. }
  137. } else {
  138. http_response_code(400);
  139. echo json_encode(array("message" => "Unable to update journal entry. Data is incomplete."));
  140. }
  141. break;
  142. case 'DELETE':
  143. if(isset($_GET['id'])) {
  144. $journalEntry->id = $_GET['id'];
  145. if($journalEntry->delete()) {
  146. http_response_code(200);
  147. echo json_encode(array("message" => "Journal entry was deleted."));
  148. } else {
  149. http_response_code(503);
  150. echo json_encode(array("message" => "Unable to delete journal entry."));
  151. }
  152. } else {
  153. http_response_code(400);
  154. echo json_encode(array("message" => "Unable to delete journal entry. ID is missing."));
  155. }
  156. break;
  157. default:
  158. http_response_code(405);
  159. echo json_encode(array("message" => "Method not allowed."));
  160. break;
  161. }
  162. ?>