Skip to content
This repository was archived by the owner on Oct 22, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/Domain/Menu/Templates/headMenu.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ class="dropdown-toggle"
</li>
<li>
<a
href="{{ BASE_URL }}/dashboard/home"
href="{{ BASE_URL }}/timesheets/showMy"
@if ($menuType == 'personal')
class="active"
@endif
Expand Down
9 changes: 4 additions & 5 deletions app/Domain/Timesheets/Controllers/ShowAll.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,14 @@ public function run(): Response
if (! empty($_POST['userId'])) {
$userId = intval(strip_tags($_POST['userId']));
}

$dateFrom = dtHelper()->userNow()->startOfMonth()->setToDbTimezone();
if (! empty($_POST['dateFrom'])) {
$dateFrom = dtHelper()->parseUserDateTime($_POST['dateFrom'])->setToDbTimezone();
if (! empty($_POST['dateFrom'])) {
$dateFrom = dtHelper()->parseUserDateTime($_POST['dateFrom'])->startOfDay()->setToDbTimezone();
}

$dateTo = dtHelper()->userNow()->endOfMonth()->setToDbTimezone();
if (! empty($_POST['dateTo'])) {
$dateTo = dtHelper()->parseUserDateTime($_POST['dateTo'])->setToDbTimezone();
if (! empty($_POST['dateTo'])) {
$dateTo = dtHelper()->parseUserDateTime($_POST['dateTo'])->endOfDay()->setToDbTimezone();
}

$invEmplCheck = '-1';
Expand Down
50 changes: 45 additions & 5 deletions app/Domain/Timesheets/Templates/showAll.tpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@
}

const projectAllLabel = <?php echo json_encode(strip_tags($tpl->__('menu.all_projects'))); ?>;
const projectNames = <?php
$projectMap = [];
foreach ($tpl->get('allProjects') as $project) {
$projectMap[$project['id']] = $project['name'];
}
echo json_encode($projectMap);
?>;

function updateProjectCountInline() {
var checkedCount = document.querySelectorAll('.project-checkbox:checked').length;
Expand All @@ -50,6 +57,15 @@ function updateProjectCountInline() {
if (countElement) {
if (allChecked || checkedCount === 0) {
countElement.textContent = projectAllLabel;
} else if (checkedCount === 1) {
var checkedProject = document.querySelector('.project-checkbox:checked');
if (checkedProject) {
var projectId = parseInt(checkedProject.value);
var projectName = projectNames[projectId] || (checkedCount + ' project(s) selected');
countElement.textContent = projectName;
} else {
countElement.textContent = checkedCount + ' project(s) selected';
}
} else {
countElement.textContent = checkedCount + ' project(s) selected';
}
Expand Down Expand Up @@ -153,7 +169,7 @@ function updateProjectCountInline() {
<button class="dt-button" onclick="document.getElementById('exportSlackForm').submit();" style="padding: 4px 14px;">
Export to Slack
</button>
</div>
</div>
<form action="<?php echo BASE_URL ?>/timesheets/showAll" method="post" id="form" name="form">
<div class="pull-right">
<div id="tableButtons" style="display:inline-block; vertical-align: middle;"></div>
Expand Down Expand Up @@ -188,11 +204,33 @@ function updateProjectCountInline() {
<button type="button" class="project-dropdown-toggle" style="width: 100%; padding: 4px 14px; text-align: left; background: #fff; border: 1px solid #ccc; cursor: pointer; border-radius: 20px; font-size: 14px; line-height: 20px; height: 30px; display: flex; align-items: center; justify-content: space-between; gap: 8px; color: #555; box-sizing: border-box;" onclick="document.getElementById('projectCheckboxDropdown').style.display = document.getElementById('projectCheckboxDropdown').style.display === 'none' ? 'block' : 'none';">
<span class="selected-count" id="projectSelectedCount" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<?php
$selectedProjects = is_array($tpl->get('projectFilter')) ? $tpl->get('projectFilter') : [$tpl->get('projectFilter')];
if ($tpl->get('projectFilter') == -1 || !is_array($tpl->get('projectFilter'))) {
$projectFilter = $tpl->get('projectFilter');
$allProjects = $tpl->get('allProjects');

if ($projectFilter == -1 || (!is_array($projectFilter) && $projectFilter == -1)) {
echo strip_tags($tpl->__('menu.all_projects'));
} elseif (is_array($projectFilter) && count($projectFilter) == 1) {
$projectId = $projectFilter[0];
$projectName = '';
foreach ($allProjects as $project) {
if ($project['id'] == $projectId) {
$projectName = $tpl->escape($project['name']);
break;
}
}
echo $projectName ?: (count($projectFilter) . ' project(s) selected');
} elseif (is_array($projectFilter)) {
echo count($projectFilter) . ' project(s) selected';
} else {
echo count($selectedProjects) . ' project(s) selected';
$projectId = (int) $projectFilter;
$projectName = '';
foreach ($allProjects as $project) {
if ($project['id'] == $projectId) {
$projectName = $tpl->escape($project['name']);
break;
}
}
echo $projectName ?: '1 project(s) selected';
}
?>
</span>
Expand All @@ -208,6 +246,8 @@ function updateProjectCountInline() {
<span><?php echo strip_tags($tpl->__('menu.all_projects')) ?></span>
</label>
<?php
$projectFilter = $tpl->get('projectFilter');
$selectedProjects = is_array($projectFilter) ? $projectFilter : ($projectFilter != -1 ? [$projectFilter] : []);
foreach ($tpl->get('allProjects') as $project) { ?>
<label style="display: flex; align-items: center; gap: 8px; padding: 10px 12px; cursor: pointer; color: #333; transition: background-color 0.2s ease;" class="project-checkbox-label" onmouseover="this.style.background='#eef2f7'; this.style.color='#333';" onmouseout="this.style.background='white'; this.style.color='#333';" onclick="event.stopPropagation();">
<input type="checkbox" name="project[]" value="<?= $project['id'] ?>" class="project-checkbox" style="margin: 0; vertical-align: middle;"
Expand Down Expand Up @@ -374,7 +414,7 @@ function updateProjectCountInline() {
</td>
<td data-order="<?php echo !empty($row['projectKey']) ? $tpl->escape($row['projectKey']) . '-' . $tpl->escape($row['ticketId']) : '#' . $tpl->escape($row['ticketId']); ?>">
<a href="#/tickets/showTicket/<?php echo $row['ticketId']; ?>">
<?php
<?php
if (!empty($row['projectKey'])) {
echo $tpl->escape($row['projectKey']) . '-' . $tpl->escape($row['ticketId']);
} else {
Expand Down
19 changes: 10 additions & 9 deletions public/assets/js/app/core/datePickers.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,12 @@ leantime.dateController = (function () {
);
}
var initModernDateRangePicker = function (fromElement, toElement, minDistance) {
var existingFromValue = jQuery(fromElement).val();
var existingToValue = jQuery(toElement).val();

var startDate = existingFromValue ? moment(existingFromValue, 'YYYY-MM-DD') : moment().startOf('month');
var endDate = existingToValue ? moment(existingToValue, 'YYYY-MM-DD') : moment().endOf('month');
var fromValue = jQuery(fromElement).val();
var toValue = jQuery(toElement).val();

var startDate = fromValue ? moment(fromValue, 'MM/DD/YYYY') : moment().startOf('month');
var endDate = toValue ? moment(toValue, 'MM/DD/YYYY') : moment().endOf('month');


jQuery(fromElement).daterangepicker({
autoUpdateInput: false,
Expand All @@ -98,7 +99,7 @@ leantime.dateController = (function () {
minDate: moment().subtract(1, 'years'),
maxDate: moment().add(1, 'years'),
locale: {
format: 'YYYY-MM-DD',
format: 'MM/DD/YYYY',
applyLabel: 'Apply',
cancelLabel: 'Cancel',
fromLabel: 'From',
Expand All @@ -107,17 +108,17 @@ leantime.dateController = (function () {
firstDay: 1
},
ranges: {
'Today': [moment(), moment()],
'Today': [moment().startOf('day'), moment().endOf('day')],
'This Week': [moment().startOf('week'), moment().endOf('week')],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()]
}
});

if (!existingFromValue) {
if (!fromValue) {
jQuery(fromElement).val(startDate.format('YYYY-MM-DD'));
}
if (!existingToValue) {
if (!toValue) {
jQuery(toElement).val(endDate.format('YYYY-MM-DD'));
}

Expand Down
Loading