Added new reports to courses and sessions to the user

1.10.x
José Loguercio 10 years ago
parent 757c2dbf0d
commit f6e320b616
  1. 1
      plugin/buycourses/lang/spanish.php
  2. 38
      plugin/buycourses/src/buy_course_plugin.class.php
  3. 6
      plugin/buycourses/src/buycourses.ajax.php
  4. 61
      plugin/buycourses/src/course_panel.php
  5. 2
      plugin/buycourses/src/index.buycourses.php
  6. 220
      plugin/buycourses/src/panel.ajax.php
  7. 57
      plugin/buycourses/src/payout_panel.php
  8. 61
      plugin/buycourses/src/session_panel.php
  9. 43
      plugin/buycourses/view/course_panel.tpl
  10. 41
      plugin/buycourses/view/payout_panel.tpl
  11. 43
      plugin/buycourses/view/session_panel.tpl

@ -10,6 +10,7 @@ $strings['transfer_enable'] = "Habilitar transferencia";
$strings['unregistered_users_enable'] = "Permitir usuarios sin registro en la plataforma";
$strings['PaypalPayoutComissions'] = "Pagar comisiones por Paypal";
$strings['MyPayouts'] = "Mis Pagos";
$strings['Comission'] = "Comisión";
$strings['Comissions'] = "Comisiones";
$strings['SetComissions'] = "Aplicar comisiones";

@ -1154,6 +1154,39 @@ class BuyCoursesPlugin extends Plugin
]
);
}
/**
* Get a list of sales by the user id
* @param int $id The user id
* @return array The sale list. Otherwise return false
*/
public function getSaleListByUserId($id)
{
if (empty($id)) {
return [];
}
$saleTable = Database::get_main_table(BuyCoursesPlugin::TABLE_SALE);
$currencyTable = Database::get_main_table(BuyCoursesPlugin::TABLE_CURRENCY);
$userTable = Database::get_main_table(TABLE_MAIN_USER);
$innerJoins = "
INNER JOIN $currencyTable c ON s.currency_id = c.id
INNER JOIN $userTable u ON s.user_id = u.id
";
return Database::select(
['c.iso_code', 'u.firstname', 'u.lastname', 's.*'],
"$saleTable s $innerJoins",
[
'where' => [
'u.id = ?' => $id
],
'order' => 'id DESC'
]
);
}
/**
* Convert the course info to array with necessary course data for save item
@ -1406,9 +1439,10 @@ class BuyCoursesPlugin extends Plugin
* @param int $payoutId - for get an individual payout if want all then false
* @return array
*/
public function getPayouts($status = self::PAYOUT_STATUS_PENDING, $payoutId = false)
public function getPayouts($status = self::PAYOUT_STATUS_PENDING, $payoutId = false, $userId = false)
{
$condition = ($payoutId) ? 'AND p.id = '. intval($payoutId) : '';
$condition2 = ($userId) ? ' AND p.user_id = ' . intval($userId) : '';
$typeResult = ($condition) ? 'first' : 'all';
$payoutsTable = Database::get_main_table(BuyCoursesPlugin::TABLE_PAYPAL_PAYOUTS);
$saleTable = Database::get_main_table(BuyCoursesPlugin::TABLE_SALE);
@ -1442,7 +1476,7 @@ class BuyCoursesPlugin extends Plugin
"p.* , u.firstname, u.lastname, efv.value as paypal_account, s.reference as sale_reference, s.price as item_price, c.iso_code",
"$payoutsTable p $innerJoins",
[
'where' => ['p.status = ? '.$condition => $status]
'where' => ['p.status = ? '.$condition . ' ' .$condition2 => $status]
],
$typeResult
);

@ -21,6 +21,9 @@ $action = isset($_GET['a']) ? $_GET['a'] : null;
switch ($action) {
case 'saleInfo':
if (api_is_anonymous()) {
break;
}
$saleId = isset($_POST['id']) ? $_POST['id'] : '';
$sale = $plugin->getSale($saleId);
@ -58,6 +61,9 @@ switch ($action) {
break;
case 'stats':
if (api_is_anonymous()) {
break;
}
$stats = [];
$stats['completed_count'] = 0;

@ -0,0 +1,61 @@
<?php
/**
* User Panel
* @package chamilo.plugin.buycourses
*/
/**
* Initialization
*/
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
$plugin = BuyCoursesPlugin::create();
$includeSessions = $plugin->get('include_sessions') === 'true';
$userInfo = api_get_user_info();
$productTypes = $plugin->getProductTypes();
$saleStatuses = $plugin->getSaleStatuses();
$paymentTypes = $plugin->getPaymentTypes();
$sales = $plugin->getSaleListByUserId($userInfo['id']);
$saleList = [];
foreach ($sales as $sale) {
if ($sale['product_type'] == 1) {
$saleList[] = [
'id' => $sale['id'],
'reference' => $sale['reference'],
'date' => api_format_date($sale['date'], DATE_TIME_FORMAT_LONG_24H),
'currency' => $sale['iso_code'],
'price' => $sale['price'],
'product_name' => $sale['product_name'],
'product_type' => $productTypes[$sale['product_type']],
'payment_type' => $paymentTypes[$sale['payment_type']]
];
}
}
$toolbar = Display::toolbarButton(
$plugin->get_lang('CourseListOnSale'),
'course_catalog.php',
'search-plus',
'primary',
['title' => $plugin->get_lang('CourseListOnSale')]
);
$templateName = get_lang('TabsDashboard');
$tpl = new Template($templateName);
$tpl->assign('showing_courses', true);
$tpl->assign('sessions_are_included', $includeSessions);
$tpl->assign('sale_list', $saleList);
$content = $tpl->fetch('buycourses/view/course_panel.tpl');
$tpl->assign('actions', $toolbar);
$tpl->assign('header', $templateName);
$tpl->assign('content', $content);
$tpl->display_one_col_template();

@ -13,7 +13,7 @@ $guess_enable = $plugin->get('unregistered_users_enable');
if ($guess_enable == "true" || isset($_SESSION['_user'])) {
// If the user is NOT an administrator, redirect it to course/session buy list
if (!api_is_platform_admin()) {
header('Location: src/course_catalog.php');
header('Location: src/course_panel.php');
exit;
}

@ -0,0 +1,220 @@
<?php
/* For licensing terms, see /chamilo_license.txt */
/**
* Responses to AJAX calls
* @package chamilo.plugin.buycourses
*/
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
api_protect_admin_script(true);
$plugin = BuyCoursesPlugin::create();
$paypalEnable = $plugin->get('paypal_enable');
$comissionsEnable = $plugin->get('comissions_enable');
$action = isset($_GET['a']) ? $_GET['a'] : null;
switch ($action) {
case 'saleInfo':
$saleId = isset($_POST['id']) ? $_POST['id'] : '';
$sale = $plugin->getSale($saleId);
$productType = ($sale['product_type'] == 1) ? get_lang('Course') : get_lang('Session');
$paymentType = ($sale['payment_type'] == 1) ? 'Paypal' : $plugin->get_lang('BankTransfer');
$productInfo = ($sale['product_type'] == 1) ? api_get_course_info_by_id($sale['product_id']) : api_get_session_info($sale['product_id']);
$currency = $plugin->getSelectedCurrency();
if ($sale['product_type'] == 1) {
$productImage = $productInfo['course_image_large'];
} else {
$productImage = ($productInfo['image']) ? $productInfo['image'] : Template::get_icon_path('session_default.png');
}
$userInfo = api_get_user_info($sale['user_id']);
$html = '<h2>' . $sale['product_name'] .'</h2>';
$html .= '<div class="row">';
$html .= '<div class="col-sm-6 col-md-6">';
$html .= '<ul>';
$html .= '<li><b>'. $plugin->get_lang('OrderPrice') . ':</b> '. $sale['price'] . '</li>';
$html .= '<li><b>'. $plugin->get_lang('CurrencyType') . ':</b> '. $currency['iso_code'] . '</li>';
$html .= '<li><b>'. $plugin->get_lang('ProductType') . ':</b> '. $productType . '</li>';
$html .= '<li><b>'. $plugin->get_lang('OrderDate') . ':</b> '. api_format_date($sale['date'], DATE_TIME_FORMAT_LONG_24H) . '</li>';
$html .= '<li><b>'. $plugin->get_lang('Buyer') . ':</b> '. $userInfo['complete_name'] . '</li>';
$html .= '<li><b>'. $plugin->get_lang('PaymentMethods') . ':</b> '. $paymentType . '</li>';
$html .= '</ul>';
$html .= '</div>';
$html .= '<div class="col-sm-6 col-md-6">';
$html .= '<img class="thumbnail" src="'. $productImage .'" >';
$html .= '</div>';
$html .= '</div>';
echo $html;
break;
case 'stats':
$stats = [];
$stats['completed_count'] = 0;
$stats['completed_total_amount'] = 0;
$stats['pending_count'] = 0;
$stats['pending_total_amount'] = 0;
$stats['canceled_count'] = 0;
$stats['canceled_total_amount'] = 0;
$completedPayouts = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_COMPLETED);
$pendingPayouts = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_PENDING);
$canceledPayouts = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_CANCELED);
$currency = $plugin->getSelectedCurrency();
foreach ($completedPayouts as $completed) {
$stats['completed_count'] = count($completedPayouts);
$stats['completed_total_amount'] += $completed['comission'];
$stats['completed_total_amount'] = number_format($stats['completed_total_amount'], 2);
}
foreach ($pendingPayouts as $pending) {
$stats['pending_count'] = count($pendingPayouts);
$stats['pending_total_amount'] += $pending['comission'];
$stats['pending_total_amount'] = number_format($stats['pending_total_amount'], 2);
}
foreach ($canceledPayouts as $canceled) {
$stats['canceled_count'] = count($canceledPayouts);
$stats['canceled_total_amount'] += $canceled['comission'];
$stats['canceled_total_amount'] = number_format($stats['canceled_total_amount'], 2);
}
$html = '<div class="row">'
. '<p>'
. '<ul>'
. '<li>'. get_plugin_lang("PayoutsTotalCompleted", "BuyCoursesPlugin") .' <b>'. $stats['completed_count'] .'</b> - '. get_plugin_lang("TotalAmount", "BuyCoursesPlugin") .' <b>'. $stats['completed_total_amount'] .' '. $currency['iso_code'] . '</b></li>'
. '<li>'. get_plugin_lang("PayoutsTotalPending", "BuyCoursesPlugin") .' <b>'. $stats['pending_count'] .'</b> - '. get_plugin_lang("TotalAmount", "BuyCoursesPlugin") .' <b>'. $stats['pending_total_amount'] .' '. $currency['iso_code'] . '</b></li>'
. '<li>'. get_plugin_lang("PayoutsTotalCanceled", "BuyCoursesPlugin") .' <b>'. $stats['canceled_count'] .'</b> - '. get_plugin_lang("TotalAmount", "BuyCoursesPlugin") .' <b>'. $stats['canceled_total_amount'] .' '. $currency['iso_code'] . '</b></li>'
. '</ul>'
. '</p>';
$html .= '</div>';
echo $html;
break;
case 'processPayout':
if (api_is_anonymous()) {
break;
}
$html = '';
$allPays = [];
$totalAccounts = 0;
$totalPayout = 0;
$payouts = isset($_POST['payouts']) ? $_POST['payouts'] : '';
if (!$payouts) {
echo Display::return_message(get_plugin_lang("SelectOptionToProceed", "BuyCoursesPlugin"), 'error', false);
break;
}
foreach($payouts as $index => $id) {
$allPays[] = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_PENDING, $id);
}
foreach($allPays as $payout) {
$totalPayout += number_format($payout['comission'], 2);
$totalAccounts++;
}
$currentCurrency = $plugin->getSelectedCurrency();
$isoCode = $currentCurrency['iso_code'];
$html .= '<p>'. get_plugin_lang("VerifyTotalAmountToProceedPayout", "BuyCoursesPlugin") .'</p>';
$html .= ''
. '<p>'
. '<ul>'
. '<li>'. get_plugin_lang("TotalAcounts", "BuyCoursesPlugin") .' <b>'. $totalAccounts .'</b></li>'
. '<li>'. get_plugin_lang("TotalPayout", "BuyCoursesPlugin") .' <b>'. $isoCode .' '. $totalPayout .'</b></li>'
. '</ul>'
. '</p>';
$html .= '<p>'. get_plugin_lang("CautionThisProcessCantBeCanceled", "BuyCoursesPlugin") .'</p>';
$html .= '</br></br>';
$html .= '<div id="spinner" class="text-center"></div>';
echo $html;
break;
case 'proceedPayout':
if (api_is_anonymous()) {
break;
}
$paypalParams = $plugin->getPaypalParams();
$pruebas = $paypalParams['sandbox'] == 1;
$paypalUsername = $paypalParams['username'];
$paypalPassword = $paypalParams['password'];
$paypalSignature = $paypalParams['signature'];
require_once("paypalfunctions.php");
$allPayouts = [];
$totalAccounts = 0;
$totalPayout = 0;
$payouts = isset($_POST['payouts']) ? $_POST['payouts'] : '';
if (!$payouts) {
echo Display::return_message(get_plugin_lang("SelectOptionToProceed", "BuyCoursesPlugin"), 'error', false);
break;
}
foreach($payouts as $index => $id) {
$allPayouts[] = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_PENDING, $id);
}
$currentCurrency = $plugin->getSelectedCurrency();
$isoCode = $currentCurrency['iso_code'];
$result = MassPayment($allPayouts, $isoCode);
if($result['ACK'] === 'Success') {
foreach($allPayouts as $payout) {
$plugin->setStatusPayouts($payout['id'], BuyCoursesPlugin::PAYOUT_STATUS_COMPLETED);
}
echo Display::return_message(get_plugin_lang("PayoutSuccess", "BuyCoursesPlugin"), 'success', false);
} else {
echo Display::return_message('<b>'.$result['L_SEVERITYCODE0'].' '.$result['L_ERRORCODE0'].'</b> - '.$result['L_SHORTMESSAGE0'].'</br><ul><li>'. $result['L_LONGMESSAGE0'].'</li></ul>', 'error', false);
}
break;
case 'cancelPayout':
if (api_is_anonymous()) {
break;
}
$payoutId = isset($_POST['id']) ? $_POST['id'] : '';
$plugin->setStatusPayouts($payoutId, BuyCoursesPlugin::PAYOUT_STATUS_CANCELED);
echo '';
break;
}
exit;

@ -0,0 +1,57 @@
<?php
/**
* User Panel
* @package chamilo.plugin.buycourses
*/
/**
* Initialization
*/
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
$plugin = BuyCoursesPlugin::create();
$includeSessions = $plugin->get('include_sessions') === 'true';
$userInfo = api_get_user_info();
$payouts = $plugin->getPayouts(BuyCoursesPlugin::PAYOUT_STATUS_COMPLETED, false, $userInfo['id']);
$payoutList = [];
foreach ($payouts as $payout) {
$payoutList[] = [
'id' => $payout['id'],
'sale_id' => $payout['sale_id'],
'reference' => $payout['sale_reference'],
'date' => api_format_date($payout['date'], DATE_TIME_FORMAT_LONG_24H),
'payout_date' => ($payout['payout_date'] === '0000-00-00 00:00:00') ? '-' : api_format_date($payout['payout_date'], DATE_TIME_FORMAT_LONG_24H),
'currency' => $payout['iso_code'],
'price' => $payout['item_price'],
'comission' => $payout['comission'],
'paypal_account' => $payout['paypal_account'],
'status' => $payout['status']
];
}
$toolbar = Display::toolbarButton(
$plugin->get_lang('CourseListOnSale'),
'course_catalog.php',
'search-plus',
'primary',
['title' => $plugin->get_lang('CourseListOnSale')]
);
$templateName = get_lang('TabsDashboard');
$tpl = new Template($templateName);
$tpl->assign('showing_courses', true);
$tpl->assign('sessions_are_included', $includeSessions);
$tpl->assign('payout_list', $payoutList);
$content = $tpl->fetch('buycourses/view/payout_panel.tpl');
$tpl->assign('actions', $toolbar);
$tpl->assign('header', $templateName);
$tpl->assign('content', $content);
$tpl->display_one_col_template();

@ -0,0 +1,61 @@
<?php
/**
* User Panel
* @package chamilo.plugin.buycourses
*/
/**
* Initialization
*/
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
$plugin = BuyCoursesPlugin::create();
$includeSessions = $plugin->get('include_sessions') === 'true';
$userInfo = api_get_user_info();
$productTypes = $plugin->getProductTypes();
$saleStatuses = $plugin->getSaleStatuses();
$paymentTypes = $plugin->getPaymentTypes();
$sales = $plugin->getSaleListByUserId($userInfo['id']);
$saleList = [];
foreach ($sales as $sale) {
if ($sale['product_type'] == 2) {
$saleList[] = [
'id' => $sale['id'],
'reference' => $sale['reference'],
'date' => api_format_date($sale['date'], DATE_TIME_FORMAT_LONG_24H),
'currency' => $sale['iso_code'],
'price' => $sale['price'],
'product_name' => $sale['product_name'],
'product_type' => $productTypes[$sale['product_type']],
'payment_type' => $paymentTypes[$sale['payment_type']]
];
}
}
$toolbar = Display::toolbarButton(
$plugin->get_lang('CourseListOnSale'),
'course_catalog.php',
'search-plus',
'primary',
['title' => $plugin->get_lang('CourseListOnSale')]
);
$templateName = get_lang('TabsDashboard');
$tpl = new Template($templateName);
$tpl->assign('showing_courses', true);
$tpl->assign('sessions_are_included', $includeSessions);
$tpl->assign('sale_list', $saleList);
$content = $tpl->fetch('buycourses/view/session_panel.tpl');
$tpl->assign('actions', $toolbar);
$tpl->assign('header', $templateName);
$tpl->assign('content', $content);
$tpl->display_one_col_template();

@ -0,0 +1,43 @@
<link rel="stylesheet" type="text/css" href="../resources/css/style.css"/>
<div id="buy-courses-tabs">
<ul class="nav nav-tabs buy-courses-tabs" role="tablist">
<li id="buy-courses-tab" class="active" role="presentation">
<a href="course_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyCourses'| get_lang }}</a>
</li>
{% if sessions_are_included %}
<li id="buy-sessions-tab" class="" role="presentation">
<a href="session_panel.php" aria-controls="buy-sessions" role="tab">{{ 'MySessions'| get_lang }}</a>
</li>
{% endif %}
<li id="buy-courses-tab" class="" role="presentation">
<a href="payout_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyPayouts'| get_plugin_lang('BuyCoursesPlugin') }}</a>
</li>
</ul>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>{{ 'Course'|get_lang }}</th>
<th class="text-center">{{ 'PaymentMethod'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'Price'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'OrderDate'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'OrderReference'|get_plugin_lang('BuyCoursesPlugin') }}</th>
</tr>
</thead>
<tbody>
{% for sale in sale_list %}
<tr>
<td>{{ sale.product_name }}</td>
<td class="text-center">{{ sale.payment_type }}</td>
<td class="text-right">{{ sale.currency ~ ' ' ~ sale.price }}</td>
<td class="text-center">{{ sale.date }}</td>
<td class="text-center">{{ sale.reference }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>

@ -0,0 +1,41 @@
<link rel="stylesheet" type="text/css" href="../resources/css/style.css"/>
<div id="buy-courses-tabs">
<ul class="nav nav-tabs buy-courses-tabs" role="tablist">
<li id="buy-courses-tab" class="" role="presentation">
<a href="course_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyCourses'| get_lang }}</a>
</li>
{% if sessions_are_included %}
<li id="buy-sessions-tab" class="" role="presentation">
<a href="session_panel.php" aria-controls="buy-sessions" role="tab">{{ 'MySessions'| get_lang }}</a>
</li>
{% endif %}
<li id="buy-courses-tab" class="active" role="presentation">
<a href="payout_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyPayouts'| get_plugin_lang('BuyCoursesPlugin') }}</a>
</li>
</ul>
<table class="table table-striped table-hover">
<thead>
<tr>
<th class="text-center">{{ 'OrderReference'| get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'PayoutDate'| get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-right">{{ 'Comission'| get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-right">{{ 'PayPalAccount'| get_plugin_lang('BuyCoursesPlugin') }}</th>
</tr>
</thead>
<tbody>
{% for payout in payout_list %}
<tr>
<td class="text-center" style="vertical-align:middle"><a id="{{ payout.sale_id }}" class="saleInfo" data-toggle="modal" data-target="#saleInfo" href="#">{{ payout.reference }}</a></td>
<td class="text-center" style="vertical-align:middle">{{ payout.payout_date }}</td>
<td class="text-right" style="vertical-align:middle">{{ payout.currency ~ ' ' ~ payout.comission }}</td>
<td class="text-right" style="vertical-align:middle">{{ payout.paypal_account }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>

@ -0,0 +1,43 @@
<link rel="stylesheet" type="text/css" href="../resources/css/style.css"/>
<div id="buy-courses-tabs">
<ul class="nav nav-tabs buy-courses-tabs" role="tablist">
<li id="buy-courses-tab" class="" role="presentation">
<a href="course_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyCourses'| get_lang }}</a>
</li>
{% if sessions_are_included %}
<li id="buy-sessions-tab" class="active" role="presentation">
<a href="session_panel.php" aria-controls="buy-sessions" role="tab">{{ 'MySessions'| get_lang }}</a>
</li>
{% endif %}
<li id="buy-courses-tab" class="" role="presentation">
<a href="payout_panel.php" aria-controls="buy-courses" role="tab">{{ 'MyPayouts'| get_plugin_lang('BuyCoursesPlugin') }}</a>
</li>
</ul>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>{{ 'Session'|get_lang }}</th>
<th class="text-center">{{ 'PaymentMethod'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'Price'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'OrderDate'|get_plugin_lang('BuyCoursesPlugin') }}</th>
<th class="text-center">{{ 'OrderReference'|get_plugin_lang('BuyCoursesPlugin') }}</th>
</tr>
</thead>
<tbody>
{% for sale in sale_list %}
<tr>
<td>{{ sale.product_name }}</td>
<td class="text-center">{{ sale.payment_type }}</td>
<td class="text-right">{{ sale.currency ~ ' ' ~ sale.price }}</td>
<td class="text-center">{{ sale.date }}</td>
<td class="text-center">{{ sale.reference }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
Loading…
Cancel
Save