Bump version to 1.17.8
- Feat: Verbrauchsauswertung – Ablesung korrigieren (Datum, Zählerstand, Korrekturnotiz) und löschen direkt aus der Tabelle (manage_kleingarten) - Feat: Inventarverwaltung – Gegenstände erfassen, bearbeiten, löschen; Ausleihe und Rückgabe je Mitglied mit Notiz und Fälligkeitsdatum tracken; Export/Import integriert (InventoryRepository, Schema, Validator, DataTransfer) - Feat: Jahresabrechnung Sperrstatus – Festschreiben/Freigeben mit serverseitiger Prüfung aller Schreibzugriffe auf Kosten und Preise
This commit is contained in:
69
includes/Repositories/CostRepository.php
Normal file → Executable file
69
includes/Repositories/CostRepository.php
Normal file → Executable file
@@ -222,6 +222,75 @@ class CostRepository extends AbstractRepository {
|
||||
return $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM {$year_table} WHERE entry_year = %d", $year ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
|
||||
}
|
||||
|
||||
/**
|
||||
* Get lock state for one statement year.
|
||||
*
|
||||
* @param int $year Selected year.
|
||||
* @return array
|
||||
*/
|
||||
public function get_statement_lock_state( $year ) {
|
||||
$details = $this->get_year_details( $year );
|
||||
|
||||
if ( ! $details ) {
|
||||
return array(
|
||||
'is_locked' => false,
|
||||
'locked_at' => null,
|
||||
'locked_by' => 0,
|
||||
);
|
||||
}
|
||||
|
||||
return array(
|
||||
'is_locked' => ! empty( $details->statement_is_locked ) && 1 === (int) $details->statement_is_locked,
|
||||
'locked_at' => isset( $details->statement_locked_at ) ? $details->statement_locked_at : null,
|
||||
'locked_by' => isset( $details->statement_locked_by ) ? (int) $details->statement_locked_by : 0,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether statement data for one year is locked.
|
||||
*
|
||||
* @param int $year Selected year.
|
||||
* @return bool
|
||||
*/
|
||||
public function is_statement_locked( $year ) {
|
||||
$state = $this->get_statement_lock_state( $year );
|
||||
|
||||
return ! empty( $state['is_locked'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Lock or unlock a statement year.
|
||||
*
|
||||
* @param int $year Selected year.
|
||||
* @param bool $is_locked Target lock state.
|
||||
* @param int $locked_by User ID that changes the state.
|
||||
* @return bool
|
||||
*/
|
||||
public function set_statement_lock( $year, $is_locked, $locked_by = 0 ) {
|
||||
$year = absint( $year );
|
||||
|
||||
if ( $year < 1 || ! $this->ensure_year( $year ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$payload = array(
|
||||
'statement_is_locked' => $is_locked ? 1 : 0,
|
||||
'statement_locked_at' => $is_locked ? $this->now() : null,
|
||||
'statement_locked_by' => $is_locked ? absint( $locked_by ) : 0,
|
||||
'updated_at' => $this->now(),
|
||||
);
|
||||
|
||||
$result = $this->wpdb->update(
|
||||
$this->year_table(),
|
||||
$payload,
|
||||
array( 'entry_year' => $year ),
|
||||
array( '%d', '%s', '%d', '%s' ),
|
||||
array( '%d' )
|
||||
);
|
||||
|
||||
return false !== $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save section-specific yearly prices.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user