<?php /** * @package VikBooking * @subpackage core * @author E4J s.r.l. * @copyright Copyright (C) 2024 E4J s.r.l. All Rights Reserved. * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL * @link https://vikwp.com */ // No direct access defined('ABSPATH') or die('No script kiddies please!'); /** * VikBooking payment schedules controller. * * @since 1.16.10 (J) - 1.6.10 (WP) */ class VikBookingControllerPayschedules extends JControllerAdmin { /** * AJAX endpoint to save a new payment schedule. * * @return void */ public function save() { $app = JFactory::getApplication(); if (!JSession::checkToken()) { VBOHttpDocument::getInstance()->close(403, JText::translate('JINVALID_TOKEN')); } $bid = $app->input->getInt('bid'); $amount = $app->input->getFloat('amount'); $dt = $app->input->getString('dt'); $time = $app->input->getString('time', '00:00'); if (!$bid || !$amount || !$dt || !$time) { VBOHttpDocument::getInstance()->close(400, JText::translate('VBO_PLEASE_FILL_FIELDS')); } $booking = VikBooking::getBookingInfoFromID($bid); if (!$booking) { VBOHttpDocument::getInstance()->close(404, JText::translate('VBO_NO_RECORDS_FOUND')); } // current date object $now_dt = JFactory::getdate('now'); // access the time with hours and minutes $time_parts = explode(':', $time); $time_hours = (int) $time_parts[0]; $time_minutes = (int) ($time_parts[1] ?? 0); // build date timestamp and string $dt_ts = VikBooking::getDateTimestamp($dt, $time_hours, $time_minutes, 0); $dt_military = date('Y-m-d H:i:s', $dt_ts); $for_dt_obj = JFactory::getDate($dt_military); if ($now_dt > $for_dt_obj) { // payment date cannot be in the past VBOHttpDocument::getInstance()->close(400, 'Payment collection date and time must be in the future (current date and time is ' . $now_dt->format('Y-m-d H:i:s') . ')'); } $user = JFactory::getUser(); $created_by = $user->name; // prepare record to be saved $pay_schedule = new stdClass; $pay_schedule->idorder = $booking['id']; $pay_schedule->fordt = $for_dt_obj->toSql(); $pay_schedule->amount = $amount; $pay_schedule->status = 0; $pay_schedule->created_on = $now_dt->toSql(); $pay_schedule->created_by = $created_by; // access the model $model = VBOModelPayschedules::getInstance(); if (!$model->save($pay_schedule)) { VBOHttpDocument::getInstance()->close(500, 'Could not store the payment schedule record'); } // reload all active schedules for this booking $active_payschedules = $model->getItems([ 'idorder' => [ 'value' => $booking['id'], ], ]); // output the JSON encoded list of active payment schedules for this booking VBOHttpDocument::getInstance()->json($active_payschedules); } /** * AJAX endpoint to delete an existing payment schedule. * * @return void */ public function delete() { $app = JFactory::getApplication(); $dbo = JFactory::getDbo(); if (!JSession::checkToken()) { VBOHttpDocument::getInstance()->close(403, JText::translate('JINVALID_TOKEN')); } $bid = $app->input->getInt('bid'); $schedule_id = $app->input->getInt('schedule_id'); if (!$bid || !$schedule_id) { VBOHttpDocument::getInstance()->close(400, 'Missing data to delete the record'); } // delete the requested record $dbo->setQuery( $dbo->getQuery(true) ->delete($dbo->qn('#__vikbooking_payschedules')) ->where($dbo->qn('id') . ' = ' . $schedule_id) ->where($dbo->qn('idorder') . ' = ' . $bid) ); $dbo->execute(); // access the model $model = VBOModelPayschedules::getInstance(); // reload all schedules for this booking $active_payschedules = $model->getItems([ 'idorder' => [ 'value' => $bid, ], ]); // output the JSON encoded list of active payment schedules for this booking VBOHttpDocument::getInstance()->json($active_payschedules); } }