File "finance.php"

Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/site/layouts/tools/finance.php
File size: 15.46 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * @package     VikBooking
 * @subpackage  com_vikbooking
 * @author      Alessio Gaggii - E4J srl
 * @copyright   Copyright (C) 2024 E4J srl. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 * @link        https://vikwp.com
 */

defined('ABSPATH') or die('No script kiddies please!');

/**
 * Obtain vars from arguments received in the layout file.
 * This is the layout file for the "finance" operator tool.
 * 
 * @var string 	$tool 		   The tool identifier.
 * @var array 	$operator      The operator record accessing the tool.
 * @var object 	$permissions   The operator-tool permissions registry.
 * @var string 	$tool_uri 	   The base URI for rendering this tool.
 */
extract($displayData);

// access environment objects
$app     = JFactory::getApplication();
$vbo_app = VikBooking::getVboApplication();

// load datepicker calendar assets
$vbo_app->loadDatePicker();

// get listings assigned to the current operator (no listings equals to all listings)
$listings = array_filter(
	array_map('intval', (array) $permissions->get('rooms', []))
);

// get the name of all listings, if not all
$listing_names = [];
if ($listings) {
	foreach (VikBooking::getAvailabilityInstance()->loadRooms() as $room_id => $room_data) {
		if (in_array($room_id, $listings)) {
			// push listing name
			$listing_names[] = $room_data['name'];
		}
	}
}

// access one report object
$report = VikBooking::getReportInstance('rates_flow');

// access the finance helper object
$finance = VBOTaxonomyFinance::getInstance();

// currency symbol
$currencysymb = VikBooking::getCurrencySymb();

// get date format
$df = $report->getDateFormat();

// get dates from filters
$from_date = $app->getUserStateFromRequest('vbo.operators.tools.finance.fromdt', 'from_date', date($df, mktime(0, 0, 0, date('n'), 1, date('Y'))), 'string');
$to_date   = $app->getUserStateFromRequest('vbo.operators.tools.finance.todt', 'to_date', date($df), 'string');

// get calculation type from filters ("stay_dates" or "booking_dates")
$calc_type = $app->getUserStateFromRequest('vbo.operators.tools.finance.type', 'calc_type', 'stay_dates', 'string');

// get the financial stats for the requested dates
try {
	$stats = $finance->getStats($from_date, $to_date, $listings, $calc_type);
} catch (Exception $e) {
	// propagate the error
	VBOHttpDocument::getInstance()->close($e->getCode(), $e->getMessage());
}

?>

<div class="vbo-operator-tool-finance-wrap">
	<div class="vbo-operator-tool-top-filters vbo-operator-tool-finance-filters">
		<div class="vbo-operator-tool-top-filters-inner">
			<form action="<?php echo $tool_uri; ?>" method="post">
				<div class="vbo-operator-tool-top-filter vbo-operator-tool-dt-filter">
					<label for="vbo-tool-finance-from-dt"><?php echo JText::translate('VBOPROMORENTFROM'); ?></label>
					<?php echo $vbo_app->getCalendar($from_date, 'from_date', 'vbo-tool-finance-from-dt'); ?>
				</div>
				<div class="vbo-operator-tool-top-filter vbo-operator-tool-dt-filter">
					<label for="vbo-tool-finance-to-dt"><?php echo JText::translate('VBOPROMORENTTO'); ?></label>
					<?php echo $vbo_app->getCalendar($to_date, 'to_date', 'vbo-tool-finance-to-dt'); ?>
				</div>
				<div class="vbo-operator-tool-top-filter vbo-operator-tool-submit-filter">
					<button type="submit" class="btn btn-primary vbo-pref-color-btn"><?php echo JText::translate('VBSEARCHBUTTON'); ?></button>
				</div>
			</form>
			<div class="vbo-operator-tool-listings">
				<span><?php echo $listing_names ? JText::sprintf('VBO_LISTING_NAMES', implode(', ', $listing_names)) : JText::translate('VBO_ALL_LISTINGS'); ?></span>
			</div>
		</div>
	</div>
	<div class="vbo-operator-tool-finance-stats">

		<div class="vbo-tool-finance-data-blocks">

			<div class="vbo-tool-finance-data-block" data-typestat="gross_revenue">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBO_GROSS_BOOKING_VALUE'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['gross_revenue']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['gross_revenue']); ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="taxes">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOINVCOLTAX'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['taxes']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['taxes']); ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="cmms">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBTOTALCOMMISSIONS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['cmms']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['cmms']); ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="revenue">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOREPORTREVENUE'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['revenue']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['revenue']); ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="ibe_revenue">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOREPORTREVENUEREVWEB'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['ibe_revenue']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['ibe_revenue']); ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="ota_revenue">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOREPORTREVENUEREVOTA'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['ota_revenue']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['ota_revenue']); ?></span>
						</span>
					</div>
				</div>
			</div>

		<?php
		if ($stats['cmm_savings'] > 0) {
			?>
			<div class="vbo-tool-finance-data-block" data-typestat="ota_avg_cmms">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBO_AVG_COMMISSIONS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value">
							<span><?php echo $stats['ota_avg_cmms']; ?>%</span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="cmm_savings">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBO_COMMISSION_SAVINGS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($stats['cmm_savings']); ?>">
							<span class="vbo-currency"><?php echo $currencysymb; ?></span>
							<span class="vbo-price"><?php echo $finance->numberFormatShort($stats['cmm_savings']); ?></span>
						</span>
					</div>
				</div>
			</div>
			<?php
		}
		?>

			<div class="vbo-tool-finance-data-block" data-typestat="tot_bookings">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBCUSTOMERTOTBOOKINGS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value">
							<span><?php echo $stats['tot_bookings']; ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="nights_booked">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOGRAPHTOTNIGHTSLBL'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo htmlspecialchars(trim(str_replace('%', '', JText::translate('VBOREPORTREVENUEPOCC'))) . ' ' . $stats['occupancy'] . '%'); ?>">
							<span><?php echo $stats['nights_booked'] . '/' . $stats['tot_inventory']; ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="avg_los">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBTRKAVGLOS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value">
							<span><?php echo $stats['avg_los']; ?></span>
						</span>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block" data-typestat="rooms_booked">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBLIBTEN'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-amount">
						<span class="vbo-tool-finance-stat-amount-value vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo htmlspecialchars(JText::translate('VBOGRAPHTOTUNITSLBL') . ' ' . $stats['room_units']); ?>">
							<span><?php echo $stats['rooms_booked']; ?></span>
						</span>
					</div>
				</div>
			</div>

		</div>

	<?php
	if (($stats['country_ranks'] ?? []) || ($stats['pos_revenue'] ?? [])) {
		?>
		<div class="vbo-tool-finance-data-block-rankings">

			<div class="vbo-tool-finance-data-block-rank" data-typestat="country_ranks">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOSTATSTOPCOUNTRIES'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-ranks">
					<?php
					foreach ($stats['country_ranks'] as $country_rank) {
						?>
						<div class="vbo-tool-finance-stat-rank">
							<div class="vbo-tool-finance-stat-rank-logo">
							<?php
							if (is_file(VBO_ADMIN_PATH . DIRECTORY_SEPARATOR . 'resources' . DIRECTORY_SEPARATOR . 'countries' . DIRECTORY_SEPARATOR . $country_rank['code'] . '.png')) {
								?>
								<img src="<?php echo VBO_ADMIN_URI . 'resources/countries/' . $country_rank['code'] . '.png'; ?>" />
								<?php
							} else {
								VikBookingIcons::e('globe');
							}
							?>
							</div>
							<div class="vbo-tool-finance-stat-rank-score">
								<div class="vbo-tool-finance-stat-rank-name">
									<span><?php echo $country_rank['name']; ?></span>
								</div>
								<div class="vbo-tool-finance-stat-rank-amount">
									<span class="vbo-currency"><?php echo $currencysymb; ?></span>
									<span class="vbo-price vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($country_rank['revenue']); ?>"><?php echo $finance->numberFormatShort($country_rank['revenue']); ?></span>
								</div>
								<div class="vbo-tool-finance-stat-rank-pcent">
									<progress class="vbo-tool-finance-progress" value="<?php echo $country_rank['pcent']; ?>" max="100"><?php echo $country_rank['pcent']; ?>%</progress>
								</div>
							</div>
						</div>
						<?php
					}
					?>
					</div>
				</div>
			</div>

			<div class="vbo-tool-finance-data-block-rank" data-typestat="pos_revenue">
				<div class="vbo-tool-finance-stat">
					<div class="vbo-tool-finance-stat-info">
						<span class="vbo-tool-finance-stat-name"><?php echo JText::translate('VBOCHANNELS'); ?></span>
					</div>
					<div class="vbo-tool-finance-stat-ranks">
					<?php
					foreach ($stats['pos_revenue'] as $pos_revenue) {
						$say_pos_name = ucfirst($pos_revenue['name']);
						?>
						<div class="vbo-tool-finance-stat-rank">
							<div class="vbo-tool-finance-stat-rank-logo">
							<?php
							if (!empty($pos_revenue['logo'])) {
								?>
								<img src="<?php echo $pos_revenue['logo']; ?>" />
								<?php
								// adjust channel name
								$say_pos_name = strtolower($pos_revenue['name']) == 'airbnbapi' ? 'Airbnb' : $say_pos_name;
								$say_pos_name = strtolower($pos_revenue['name']) == 'googlehotel' ? 'Google Hotel' : $say_pos_name;
							} elseif (!strcasecmp($pos_revenue['name'], 'website')) {
								VikBookingIcons::e('hotel');
								// adjust channel name
								$say_pos_name = JText::translate('VBORDFROMSITE');
							} else {
								VikBookingIcons::e('globe');
							}
							?>
							</div>
							<div class="vbo-tool-finance-stat-rank-score">
								<div class="vbo-tool-finance-stat-rank-name">
									<span><?php echo $say_pos_name; ?></span>
								</div>
								<div class="vbo-tool-finance-stat-rank-amount">
									<span class="vbo-currency"><?php echo $currencysymb; ?></span>
									<span class="vbo-price vbo-tooltip vbo-tooltip-top" data-tooltiptext="<?php echo $currencysymb . ' ' . VikBooking::numberFormat($pos_revenue['revenue']); ?>"><?php echo $finance->numberFormatShort($pos_revenue['revenue']); ?></span>
								</div>
								<div class="vbo-tool-finance-stat-rank-pcent">
									<progress class="vbo-tool-finance-progress" value="<?php echo $pos_revenue['pcent']; ?>" max="100"><?php echo $pos_revenue['pcent']; ?>%</progress>
								</div>
							</div>
						</div>
						<?php
					}
					?>
					</div>
				</div>
			</div>

		</div>
		<?php
	}
	?>

	</div>
</div>