admin payout

This commit is contained in:
Jun Barroga 2024-03-22 14:18:39 +08:00
parent ed30d71290
commit e30c1453e1
3 changed files with 312 additions and 300 deletions

View File

@ -1,8 +1,9 @@
<?php
$_SESSION["is_test"]=true;
$_SESSION["test_email_rcpt"]="";
$_SESSION["test_email_rcpt"]="junjihadbarroga@gmail.com";
$_SESSION["sales_email"]="sales@obanana.com";
$_SESSION["data_endpoint"]="api.obanana.shop";
$_SESSION["transfer_fee"]=0.02;
if ($_SESSION["is_test"]){
$_SESSION["obpay"]="web.obanana.io/test";
$_SESSION["obpay_gate"]="gate.obanana.io/api";

View File

@ -99,183 +99,179 @@ $users = getUsers();
</div>
<div class="row">
<?php
$totalUsers = count($users);
$usersPerPage = 20;
$totalPages = ceil($totalUsers / $usersPerPage);
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;
$start = ($currentPage - 1) * $usersPerPage;
$end = $start + $usersPerPage - 1;
<?php
$totalUsers = count($users);
$usersPerPage = 20;
$totalPages = ceil($totalUsers / $usersPerPage);
$currentPage = isset($_GET['page']) ? $_GET['page'] : 1;
$start = ($currentPage - 1) * $usersPerPage;
$end = $start + $usersPerPage - 1;
for ($x = $start; $x <= $end && $x < $totalUsers; $x++) {
$user = $users[$x];
// $customerUser = getCustomerbyLoginId($user['_id']);
// $vendorUser = getVendorbyLoginId($user['_id']);
?>
<div class="col-lg-6 col-xl-4 mb-24px">
<div class="ec-user-card card card-default p-4">
<a href="javascript:0" class="view-detail" id="modalTrigger-<?php echo $user['_id']; ?>"><i class="mdi mdi-eye-plus-outline"></i></a>
<!-- <a href="javascript:0" data-bs-toggle="modal" data-bs-target="#modalContact-<?php echo $user['_id']; ?>" class="view-detail"><i class="mdi mdi-eye-plus-outline"></i></a> -->
<a href="javascript:0" class="media text-secondary">
<img src="https://upload.wikimedia.org/wikipedia/commons/7/7e/Circle-icons-profile.svg" class="mr-3 img-fluid" alt="Avatar Image">
<div class="media-body">
<h5 class="mt-0 mb-2 text-dark"><?php echo $user['username'] ?></h5>
<div class="icon">
<li class="d-flex mb-1">
<i class="mdi mdi-account-key" style="font-size: 20px;"></i>
<span><?php echo $user['user_type'] ?></span>
</li>
</div>
</div>
</a>
</div>
</div>
for ($x = $start; $x <= $end && $x < $totalUsers; $x++) {
$user = $users[$x];
?>
<div class="col-lg-6 col-xl-4 mb-24px">
<div class="ec-user-card card card-default p-4">
<a href="javascript:0" class="view-detail" id="modalTrigger-<?php echo $user['_id']; ?>"><i class="mdi mdi-eye-plus-outline"></i></a>
<!-- <a href="javascript:0" data-bs-toggle="modal" data-bs-target="#modalContact-<?php echo $user['_id']; ?>" class="view-detail"><i class="mdi mdi-eye-plus-outline"></i></a> -->
<a href="javascript:0" class="media text-secondary">
<img src="https://upload.wikimedia.org/wikipedia/commons/7/7e/Circle-icons-profile.svg" class="mr-3 img-fluid" alt="Avatar Image">
<div class="media-body">
<h5 class="mt-0 mb-2 text-dark"><?php echo $user['username'] ?></h5>
<div class="icon">
<li class="d-flex mb-1">
<i class="mdi mdi-account-key" style="font-size: 20px;"></i>
<span><?php echo $user['user_type'] ?></span>
</li>
</div>
</div>
</a>
</div>
</div>
<?php } ?>
</div>
<div class="modal fade modal-contact-detail" id="modalContact-<?php echo $user['_id']; ?>" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header justify-content-end border-bottom-0">
<!-- Modal -->
<?php foreach ($users as $user) { ?>
<div class="modal fade modal-contact-detail" id="modalContact-<?php echo $user['_id']; ?>" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header justify-content-end border-bottom-0">
<button type="button" class="btn-close-icon" data-bs-dismiss="modal" aria-label="Close">
<i class="mdi mdi-close"></i>
</button>
</div>
<div class="modal-body pt-0">
<div class="row no-gutters">
<div class="col-md-12">
<div class="profile-content-left px-4">
<form action="user-card-action.php" method="post">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="text-dark font-weight-medium pt-3 mb-2">Email</label>
<input type="text" name="username" class="form-control" value="<?php echo $user['username']; ?>" readonly>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="text-dark font-weight-medium pt-3 mb-2">User Type</label>
<select class="form-select" name="user_type">
<option value="">Select User Type</option>
<option value="admin" <?php echo ($user['user_type'] === 'admin') ? 'selected' : ''; ?>>admin</option>
<option value="vendor" <?php echo ($user['user_type'] === 'vendor') ? 'selected' : ''; ?>>vendor</option>
<option value="customer" <?php echo ($user['user_type'] === 'customer') ? 'selected' : ''; ?>>customer</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<input type="hidden" name="_id" class="form-control" value="<?php echo $user['_id']; ?>">
</div>
</div>
</div>
<div class="col-md-12">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<button type="button" class="btn-close-icon" data-bs-dismiss="modal" aria-label="Close">
<i class="mdi mdi-close"></i>
</button>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
<?php foreach ($users as $user) { ?>
registerModalTrigger('<?php echo $user['_id']; ?>');
<?php } ?>
});
<div class="modal-body pt-0">
<div class="row no-gutters">
<div class="col-md-12">
<div class="profile-content-left px-4">
<form action="user-card-action.php" method="post">
<div class="row">
function registerModalTrigger(userId) {
var modalTrigger = document.getElementById('modalTrigger-' + userId);
var sessionToken = '<?php echo isset($_SESSION["token"]) ? $_SESSION["token"] : ""; ?>';
var email = '<?php echo isset($_SESSION["email"]) ? $_SESSION["email"] : ""; ?>';
var password = '<?php echo isset($_SESSION["password"]) ? $_SESSION["password"] : ""; ?>';
<div class="col-md-6">
<div class="form-group">
<label class="text-dark font-weight-medium pt-3 mb-2">Email</label>
<input type="text" name="username" class="form-control" value="<?php echo $user['username']; ?>" readonly>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="text-dark font-weight-medium pt-3 mb-2">User Type</label>
<select class="form-select" name="user_type">
<option value="">Select User Type</option>
<option value="admin" <?php echo ($user['user_type'] === 'admin') ? 'selected' : ''; ?>>admin</option>
<option value="vendor" <?php echo ($user['user_type'] === 'vendor') ? 'selected' : ''; ?>>vendor</option>
<option value="customer" <?php echo ($user['user_type'] === 'customer') ? 'selected' : ''; ?>>customer</option>
</select>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<input type="hidden" name="_id" class="form-control" value="<?php echo $user['_id']; ?>">
</div>
</div>
</div>
<div class="col-md-12">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
if (modalTrigger) {
modalTrigger.addEventListener('click', function() {
renewToken(sessionToken, email, password, userId);
});
}
}
<script>
document.addEventListener('DOMContentLoaded', function() {
<?php foreach ($users as $user) { ?>
registerModalTrigger('<?php echo $user['_id']; ?>');
<?php } ?>
});
function renewToken(sessionToken, email, password, userId) {
login(email, password, sessionToken, function() {
showTheModal(userId);
});
}
function registerModalTrigger(userId) {
var modalTrigger = document.getElementById('modalTrigger-' + userId);
var sessionToken = '<?php echo isset($_SESSION["token"]) ? $_SESSION["token"] : ""; ?>';
var email = '<?php echo isset($_SESSION["email"]) ? $_SESSION["email"] : ""; ?>';
var password = '<?php echo isset($_SESSION["password"]) ? $_SESSION["password"] : ""; ?>';
function login(username, password, sessionToken, callback) {
fetch("https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "{{apiKey}}"
},
body: JSON.stringify({
username: username,
password: password
})
})
.then(response => {
if (response.ok) {
return response.json();
} else {
throw new Error("Unable to login");
}
})
.then(data => {
// Update the session token on the server side
fetch("update-token-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
token: data.token
})
})
.then(response => response.json())
.then(result => {
if (result.status === 'success') {
// Update the session token in the client-side variable
sessionToken = data.token;
console.log("New Token:", sessionToken);
callback();
} else {
throw new Error("Unable to update session token");
}
});
})
.catch(error => {
console.error("Error:", error.message);
});
}
if (modalTrigger) {
modalTrigger.addEventListener('click', function() {
// Renew the login token before showing the modal
renewToken(sessionToken, email, password, userId);
});
}
}
function showTheModal(userId) {
// Add your logic here to show the modal
// You may need to trigger it manually if using Bootstrap modal
$('#modalContact-' + userId).modal('show');
}
</script>
function renewToken(sessionToken, email, password, userId) {
// Add your logic here to renew the login token
login(email, password, sessionToken, function() {
// Callback function after renewing the token, e.g., show the modal
showTheModal(userId);
});
}
<!-- Pagination Links -->
<div class="pagination">
<?php
for ($page = 1; $page <= $totalPages; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a>';
}
?>
</div>
function login(username, password, sessionToken, callback) {
fetch("https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "{{apiKey}}"
},
body: JSON.stringify({
username: username,
password: password
})
})
.then(response => {
if (response.ok) {
return response.json();
} else {
throw new Error("Unable to login");
}
})
.then(data => {
// Update the session token on the server side
fetch("update-token-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
token: data.token
})
})
.then(response => response.json())
.then(result => {
if (result.status === 'success') {
// Update the session token in the client-side variable
sessionToken = data.token;
console.log("New Token:", sessionToken);
callback();
} else {
throw new Error("Unable to update session token");
}
});
})
.catch(error => {
console.error("Error:", error.message);
});
}
function showTheModal(userId) {
// Add your logic here to show the modal
// You may need to trigger it manually if using Bootstrap modal
$('#modalContact-' + userId).modal('show');
}
</script>
<?php } ?>
</div>
<!-- Pagination Links -->
<div class="pagination">
<?php
for ($page = 1; $page <= $totalPages; $page++) {
echo '<a href="?page=' . $page . '">' . $page . '</a>';
}
?>
</div>
<!-- Contact Modal -->

View File

@ -236,45 +236,50 @@ if (is_array($vendorOrderss)) {
</thead>
<tbody>
<?php
$totalOrders = count($vendorOrders);
for ($i = 0; $i < $totalOrders; $i++) {
$order = $vendorOrders[$i];
$orderArray = json_encode($order, true);
$orderItems = json_decode($orderArray, true);
<?php
$totalOrders = count($vendorOrders);
for ($i = 0; $i < $totalOrders; $i++) {
$order = $vendorOrders[$i];
$orderArray = json_encode($order, true);
$orderItems = json_decode($orderArray, true);
if ($orderItems['payment']['status'] === 'PAID') {
foreach ($orderItems['items'] as $item) {
$isPayoutCompleted = !empty($orderItems['payout_status']);
?>
<tr>
<td><input type="checkbox" <?php echo $isPayoutCompleted ? 'disabled' : ''; ?>></td>
<td><?php echo $orderItems['payment_method']; ?></td>
<td><?php echo $item['price']; ?></td>
<td>
<span class="badge badge-success"><?php echo $orderItems['payment']['status']; ?></span>
</td>
<td>
<span class="badge badge-warning"><?php echo $isPayoutCompleted ? 'Yes' : 'No'; ?></span>
</td>
<td>
<a class="text-dark" href=""><?php echo $item['product']['name']; ?></a>
</td>
<td><?php echo $orderItems['updatedAt']; ?></td>
<td hidden><?php echo $orderItems['_id']; ?></td>
<td class="text-right">
<div class="dropdown show d-inline-block widget-dropdown">
<a class="dropdown-toggle icon-burger-mini" href="" role="button" id="dropdown-recent-order1" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-display="static"></a>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-recent-order1">
<li class="dropdown-item">
<a href="#">Details</a>
</li>
</ul>
</div>
</td>
</tr>
<?php
}
}
}
?>
</tbody>
if ($orderItems['payment']['status'] === 'PAID') {
foreach ($orderItems['items'] as $item) {
?>
<tr>
<td><input type="checkbox"></td>
<td><?php echo $orderItems['payment_method']; ?></td>
<td><?php echo $item['price']; ?></td>
<td>
<span class="badge badge-success"><?php echo $orderItems['payment']['status']; ?></span>
</td>
<td><span class="badge badge-warning"> <?php echo empty($orderItems['payout_status']) ? 'No' : 'Yes'; ?></span></td>
<td>
<a class="text-dark" href=""><?php echo $item['product']['name']; ?></a>
</td>
<td><?php echo $orderItems['updatedAt']; ?></td>
<td class="text-right">
<div class="dropdown show d-inline-block widget-dropdown">
<a class="dropdown-toggle icon-burger-mini" href="" role="button" id="dropdown-recent-order1" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-display="static"></a>
<ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-recent-order1">
<li class="dropdown-item">
<a href="#">Details</a>
</li>
</ul>
</div>
</td>
</tr>
<?php
}
}
}
?>
</tbody>
</table>
</div>
</div>
@ -284,76 +289,115 @@ if (is_array($vendorOrderss)) {
</div>
</div>
<script>
function createPayout() {
var rows = document.querySelectorAll("#recent-orders tbody tr");
var selectedBank = JSON.parse('<?php echo $selectedBankAccountJSON; ?>');
var selectedOrders = [];
var grossAmount = 0;
var feesDeductionAdjustment = 0;
const token = '<?php echo $_SESSION["token"] ?>';
rows.forEach(function(row) {
var checkbox = row.querySelector("input[type=checkbox]");
if (checkbox && checkbox.checked) {
var amount = parseFloat(row.cells[2].innerText);
grossAmount += amount;
var individualFee = 50;
feesDeductionAdjustment += individualFee;
var breakdownItem = {
Type: "Payment",
"Transaction date": row.cells[6].innerText,
"Gross Amount": amount,
Fee: individualFee,
"Net Amount": amount - individualFee,
Description: row.cells[5].querySelector("a").innerText
};
function createPayout() {
var rows = document.querySelectorAll("#recent-orders tbody tr");
var selectedBank = JSON.parse('<?php echo $selectedBankAccountJSON; ?>');
var selectedOrders = [];
var grossAmount = 0;
var totalIndividualFee = 0;
var feesDeductionAdjustment = <?php echo $_SESSION["transfer_fee"] ?>;
var feesPercentage = (feesDeductionAdjustment * 100) + '%';
const token = '<?php echo $_SESSION["token"] ?>';
const vendorId = '<?php echo ($array['_id']); ?>';
const vendorName = '<?php echo ($array['user_login']); ?>';
rows.forEach(function(row) {
var checkbox = row.querySelector("input[type=checkbox]");
if (checkbox && checkbox.checked) {
var amount = parseFloat(row.cells[2].innerText);
var orderId = row.cells[7].innerText;
grossAmount += amount;
var individualFee = amount * <?php echo $_SESSION["transfer_fee"] ?>;
totalIndividualFee += individualFee;
// feesDeductionAdjustment += individualFee;
var breakdownItem = {
Type: "Payment",
"Transaction date": row.cells[6].innerText,
"Gross Amount": amount,
Fee: individualFee,
"Net Amount": amount - individualFee,
Description: row.cells[5].querySelector("a").innerText,
orderId: orderId
};
selectedOrders.push(breakdownItem);
}
});
selectedOrders.push(breakdownItem);
}
});
var netAmount = grossAmount - feesDeductionAdjustment;
var netAmount = grossAmount - (grossAmount * feesDeductionAdjustment);
var postData = {
gross_amount: grossAmount.toFixed(2),
fees_deduction_adjustment: feesDeductionAdjustment.toFixed(2), // Total of individual fees
net_amount: netAmount.toFixed(2),
breakdown: selectedOrders,
bank_information: [
selectedBank
],
transaction_logs: selectedOrders, // Assuming transaction logs structure similar to breakdown
vendor_details: [
{ vendor_id: "123", vendor_name: "Sample Vendor" }
],
status: "PENDING",
created_by: "Sample User"
};
var fees_breakdown = {
transfer_fee: totalIndividualFee, };
// POST request to the endpoint
fetch('https://api.obanana.shop/api/v1/payouts/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer " + token,
},
body: JSON.stringify(postData)
})
.then(response => {
if (response.ok) {
var postData = {
gross_amount: grossAmount.toFixed(2),
fees_deduction_adjustment: feesPercentage,
net_amount: netAmount.toFixed(2),
breakdown: fees_breakdown,
bank_information: [
selectedBank
],
transaction_logs: selectedOrders,
vendor_details: [
{ vendor_id: vendorId,
vendor_name: vendorName}
],
status: "PENDING",
created_by: "Sample User",
};
fetch('https://api.obanana.shop/api/v1/payouts/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer " + token,
},
body: JSON.stringify(postData)
})
.then(response => {
if (response.ok) {
return response.json();
} else {
throw new Error('Failed to create payout');
}
})
.then(data => {
console.log('Payout created successfully');
} else {
console.error('Failed to create payout');
}
})
.catch(error => {
console.error('Error:', error);
});
}
</script>
selectedOrders.forEach(order => {
var orderId = order.orderId;
fetch(`https://api.obanana.shop/api/v1/orders/${orderId}`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
"Authorization": "Bearer " + token,
},
body: JSON.stringify({
payout_status: {
payout_id: data._id,
status: "Processing"
}
})
})
.then(response => {
// if (!response.ok) {
// console.error(`Failed to update payout status for order ${orderId}`);
// }
if (!response.ok) {
console.error(`Failed to update payout status for order ${orderId}`);
} else {
location.reload();
}
})
.catch(error => {
console.error(`Error updating payout status for order ${orderId}:`, error);
});
});
})
.catch(error => {
console.error('Error:', error);
});
}
</script>
</div>
</div>
@ -417,35 +461,6 @@ if (is_array($vendorOrderss)) {
</td>
</tr>
<tr>
<td>₱2,340</td>
<td>EastWest</td>
<td>**** **** 1234</td>
<td>Jon-Jon Manaay</td>
<td>Oct 27, 2018</td>
<td>
<span class="badge badge-warning">Processing</span>
</td>
<td class="text-right">
<div
class="dropdown show d-inline-block widget-dropdown">
<a class="dropdown-toggle icon-burger-mini"
href="" role="button"
id="dropdown-recent-order1"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
data-display="static"></a>
<ul class="dropdown-menu dropdown-menu-right"
aria-labelledby="dropdown-recent-order1">
<li class="dropdown-item">
<a href="#">Details</a>
</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
</div>