Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96185e2334 | ||
| 7d53000fc2 |
@@ -1,2 +1,2 @@
|
|||||||
parameters:
|
parameters:
|
||||||
app.version: '0.1.34'
|
app.version: '0.1.35'
|
||||||
|
|||||||
@@ -138,19 +138,17 @@ export const useHoursPage = () => {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
const canCreateValidationRowFromAbsence = (employeeId: number) => {
|
const canCreateEmptyValidationRow = (employeeId: number) => {
|
||||||
const row = rows.value[employeeId]
|
const row = rows.value[employeeId]
|
||||||
if (row?.workHourId) return false
|
if (row?.workHourId) return false
|
||||||
|
if (!hasContractAtSelectedDate(employeeId)) return false
|
||||||
const dayRow = dayContextByEmployeeId.value.get(employeeId)
|
const dayRow = dayContextByEmployeeId.value.get(employeeId)
|
||||||
return !!dayRow?.absenceLabel && hasContractAtSelectedDate(employeeId)
|
return !!dayRow?.absenceLabel || is4hContract(employeeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
const canCreateSiteValidationRowFromAbsence = (employeeId: number) => {
|
const canCreateValidationRowFromAbsence = (employeeId: number) => canCreateEmptyValidationRow(employeeId)
|
||||||
const row = rows.value[employeeId]
|
|
||||||
if (row?.workHourId) return false
|
const canCreateSiteValidationRowFromAbsence = (employeeId: number) => canCreateEmptyValidationRow(employeeId)
|
||||||
const dayRow = dayContextByEmployeeId.value.get(employeeId)
|
|
||||||
return !!dayRow?.absenceLabel && hasContractAtSelectedDate(employeeId)
|
|
||||||
}
|
|
||||||
|
|
||||||
const bulkValidatableEmployeeIds = computed(() => {
|
const bulkValidatableEmployeeIds = computed(() => {
|
||||||
return visibleEmployees.value
|
return visibleEmployees.value
|
||||||
@@ -347,6 +345,10 @@ export const useHoursPage = () => {
|
|||||||
|
|
||||||
const isPresenceTracking = (employee: Employee) => employee.contract?.trackingMode === TRACKING_MODES.PRESENCE
|
const isPresenceTracking = (employee: Employee) => employee.contract?.trackingMode === TRACKING_MODES.PRESENCE
|
||||||
const isTimeTracking = (employee: Employee) => !isPresenceTracking(employee)
|
const isTimeTracking = (employee: Employee) => !isPresenceTracking(employee)
|
||||||
|
const is4hContract = (employeeId: number) => {
|
||||||
|
const employee = employees.value.find((e) => e.id === employeeId)
|
||||||
|
return employee?.contract?.weeklyHours === 4
|
||||||
|
}
|
||||||
const isRowLocked = (employeeId: number) => {
|
const isRowLocked = (employeeId: number) => {
|
||||||
const row = rows.value[employeeId]
|
const row = rows.value[employeeId]
|
||||||
if (!row) return false
|
if (!row) return false
|
||||||
@@ -692,13 +694,8 @@ export const useHoursPage = () => {
|
|||||||
options: { toast?: boolean } = {}
|
options: { toast?: boolean } = {}
|
||||||
) => {
|
) => {
|
||||||
const row = rows.value[employeeId]
|
const row = rows.value[employeeId]
|
||||||
const dayRow = dayContextByEmployeeId.value.get(employeeId)
|
|
||||||
if (!row?.workHourId && checked) {
|
if (!row?.workHourId && checked) {
|
||||||
const employee = employees.value.find((item) => item.id === employeeId)
|
if (canCreateEmptyValidationRow(employeeId)) {
|
||||||
const hasAbsence = !!dayRow?.absenceLabel
|
|
||||||
const canCreateFromAbsence = !!employee && hasAbsence && hasContractAtSelectedDate(employeeId)
|
|
||||||
|
|
||||||
if (canCreateFromAbsence) {
|
|
||||||
await bulkUpsertWorkHours({
|
await bulkUpsertWorkHours({
|
||||||
workDate: selectedDate.value,
|
workDate: selectedDate.value,
|
||||||
entries: [{
|
entries: [{
|
||||||
@@ -746,13 +743,8 @@ export const useHoursPage = () => {
|
|||||||
options: { toast?: boolean } = {}
|
options: { toast?: boolean } = {}
|
||||||
) => {
|
) => {
|
||||||
const row = rows.value[employeeId]
|
const row = rows.value[employeeId]
|
||||||
const dayRow = dayContextByEmployeeId.value.get(employeeId)
|
|
||||||
if (!row?.workHourId && checked) {
|
if (!row?.workHourId && checked) {
|
||||||
const employee = employees.value.find((item) => item.id === employeeId)
|
if (canCreateEmptyValidationRow(employeeId)) {
|
||||||
const hasAbsence = !!dayRow?.absenceLabel
|
|
||||||
const canCreateFromAbsence = !!employee && hasAbsence && hasContractAtSelectedDate(employeeId)
|
|
||||||
|
|
||||||
if (canCreateFromAbsence) {
|
|
||||||
await bulkUpsertWorkHours({
|
await bulkUpsertWorkHours({
|
||||||
workDate: selectedDate.value,
|
workDate: selectedDate.value,
|
||||||
entries: [{
|
entries: [{
|
||||||
|
|||||||
@@ -134,13 +134,15 @@ final readonly class WorkHourBulkUpsertProcessor implements ProcessorInterface
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$is4hContract = 4 === $contract->getWeeklyHours();
|
||||||
|
|
||||||
if ($this->isEntryEmpty($normalized)) {
|
if ($this->isEntryEmpty($normalized)) {
|
||||||
// Convention choisie: une ligne vide supprime l'enregistrement existant.
|
// Convention choisie: une ligne vide supprime l'enregistrement existant.
|
||||||
if ($existing) {
|
if ($existing) {
|
||||||
$this->entityManager->remove($existing);
|
$this->entityManager->remove($existing);
|
||||||
++$result->deleted;
|
++$result->deleted;
|
||||||
} elseif (($absenceByEmployeeId[$employeeId] ?? false) === true) {
|
} elseif (($absenceByEmployeeId[$employeeId] ?? false) === true || $is4hContract) {
|
||||||
// Si une absence existe ce jour, on garde une ligne technique pour pouvoir valider la journée.
|
// Si une absence existe ce jour ou contrat 4h, on garde une ligne technique pour pouvoir valider la journée.
|
||||||
$workHour = new WorkHour()
|
$workHour = new WorkHour()
|
||||||
->setEmployee($employee)
|
->setEmployee($employee)
|
||||||
->setWorkDate($workDate)
|
->setWorkDate($workDate)
|
||||||
|
|||||||
Reference in New Issue
Block a user